powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ORDER BY и UNION
8 сообщений из 8, страница 1 из 1
ORDER BY и UNION
    #32059014
Label
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такой запросец:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
(
SELECT [ArticleId], [dtmCreated], [title] FROM Articles
WHERE  [ArticleTypeId]= 1  AND ([title] like '% при %') ORDER BY  2 
)
UNION 
(
SELECT [ArticleId], [dtmCreated], [title] FROM Articles
WHERE  [ArticleTypeId]= 1  AND ([title] like '%при%')  ORDER BY  2  
) 

При выполнении кричит: Incorrect syntax near the keyword 'ORDER' . Без ORDER BY работает. Сами подзапросы по отдельности тоже...
Нужто нельзя использовать сортировку при UNION, а только целиком результат объединения сортировать..?
...
Рейтинг: 0 / 0
ORDER BY и UNION
    #32059019
Bzzzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Убрать 1-й ORDER BY - и пойдет!
...
Рейтинг: 0 / 0
ORDER BY и UNION
    #32059024
nandji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скобочки тоже :)) и получится сортировка юниона в целом
а вообще если очень надо то мона измудрить вот так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT * FROM (
SELECT [ArticleId], [dtmCreated], [title] FROM Articles
WHERE  [ArticleTypeId]= 1  AND ([title] like '% при %') ORDER BY  2 ) t1
UNION 
SELECT * FROM (
SELECT [ArticleId], [dtmCreated], [title] FROM Articles
WHERE  [ArticleTypeId]= 1  AND ([title] like '%при%')  ORDER BY  2 ) t2
...
Рейтинг: 0 / 0
ORDER BY и UNION
    #32059029
ura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем два запроса? Если написать просто
Код: plaintext
1.
2.
SELECT [ArticleId], [dtmCreated], [title] FROM Articles
WHERE  [ArticleTypeId]= 1  AND ([title] like '%при%')  ORDER BY  2  
то результат будет таким же...
А если нужно продублировать записи с '% при %' тогда используй UNION ALL (хотя так дублировать вроде незачем, PK в результате не будет...)
...
Рейтинг: 0 / 0
ORDER BY и UNION
    #32059057
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай
использование ORDER BY в подзапросе разрешатся если указана фраза TOP, т.е.


(
SELECT TOP 100 PERCENT [ArticleId], [dtmCreated], [title] FROM Articles
WHERE [ArticleTypeId]=1 AND ([title] like '% при %') ORDER BY 2
)
UNION
(
SELECT TOP 100 PERCENT [ArticleId], [dtmCreated], [title] FROM Articles
WHERE [ArticleTypeId]=1 AND ([title] like '%при%') ORDER BY 2
)

А задачу думаю можно свести к одному запросу(если я правильно понял)

Код: plaintext
1.
2.
3.
SELECT [ArticleId], [dtmCreated], [title] 
FROM Articles
WHERE  [ArticleTypeId]= 1  AND ([title] like '%при%') 
ORDER BY CASE WHEN [title] like '% при %' THEN  1  ELSE  2  END, [dtmCreated]
...
Рейтинг: 0 / 0
ORDER BY и UNION
    #32059107
Label
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению просто TOP не помогло. В итоге только вот это работает без ошибок:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT * FROM (
SELECT TOP  100  PERCENT [ArticleId], [dtmCreated], [title] FROM Articles
WHERE  [ArticleTypeId]= 1  AND ([title] like '% при %') ORDER BY  2 ) t1
UNION 
SELECT * FROM (
SELECT TOP  100  PERCENT [ArticleId], [dtmCreated], [title] FROM Articles
WHERE  [ArticleTypeId]= 1  AND ([title] like '%при%')  ORDER BY  2 ) t2


To Glory: а что делает запрос который вы мне предложили (словами)? Я делаю типа поиск. Логика простоя, например ищем статьи в которых встречается слово "при". Поэтому сначала должны идти те, в которых слово "при" встречается целиком (обрамнелено пробелами (возможно знаки припинания добавлю)), а потом те записи, где оно как подстрока в слове. Ну и в каждой из групп отсортировано по дате...
...
Рейтинг: 0 / 0
ORDER BY и UNION
    #32059135
Фотография Александр Степанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если взять задачу в общем виде, то всегда можно сделать что-то вроде этого:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Select t1.*, 1  As OrderBy from t1
UNION
Select t2.*, 2  As OrderBy from t2
UNION
...
UNION
Select t1000.*, 1000  As OrderBy from t1000
Order By OrderBy, <остальные сортировки>


С уважением,
Александр Степанов
...
Рейтинг: 0 / 0
ORDER BY и UNION
    #32059217
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Label

К сожалению просто TOP не помогло

Читайте BOL

"The TOP clause limits the number of rows returned in the result set.

TOP n [PERCENT]

n specifies how many rows are returned. If PERCENT is not specified, n is the number of rows to return. If PERCENT is specified, n is the percentage of the result set rows to return:
"

а что делает запрос который вы мне предложили (словами)?
Он делает именно, то что вы и написали, а именно

ищем статьи в которых встречается слово "при".
WHERE [ArticleTypeId]=1 AND ([title] like '%при%')

Поэтому сначала должны идти те, в которых слово "при"
встречается целиком ... а потом те записи, где оно как подстрока в слове

ORDER BY CASE WHEN [title] like '% при %' THEN 1 ELSE 2 END
для [title] like '% при %' будет выдаватся 1, для других случаев - 2. Поэтому при сортировке записи с 1-ей будет выводится первыми
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ORDER BY и UNION
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]