Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
ELEKTpoHuK Member Откуда: Сообщений: 56 |
Друзья, помогите пожалуйста, что-то не получается самому разобраться, при этом кажется, что ответ на поверхности. Поиском отыскать не удалось. есть таблица вида
Мне из нее необходимо выбрать строку где status - max, при этом выбрать все данные, и поле name тоже Если бы поле name (которое может отличаться) было не нужно, то такой запрос выбирает нужную строчку. SELECT a.nomer, a.kolvo, max(b.[status]) as status FROM table a LEFT OUTER JOIN table AS b ON a.[nomer] = b.[nomer] GROUP BY a.nomer, a.kolvo Но мне необходимо как раз и то поле, которое может отличаться, но имеет приоритет по статусу. Пробовал так SELECT a.nomer, a.kolvo, max(b.[status]) as status, b.name FROM table a LEFT OUTER JOIN table AS b ON a.[nomer] = b.[nomer] GROUP BY a.nomer, a.kolvo выдает ошибку is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. пробовал вводить это поле (name) в GROUP BY, в этом случае выбираются все 3 строки. Подскажите пожалуйста, куда копать. |
|||||||||||||||||
17 фев 14, 14:11 [15577144] Ответить | Цитировать Сообщить модератору |
tpg Member Откуда: Novosibirsk Сообщений: 23902 |
ROW_NUMBER() |
17 фев 14, 14:16 [15577190] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
ELEKTpoHuK, Ссылко |
17 фев 14, 14:46 [15577463] Ответить | Цитировать Сообщить модератору |
Алексей Куренков Member [заблокирован] Откуда: Москва Сообщений: 567 |
ELEKTpoHuK,SELECT a.nomer, a.kolvo, max(b.[status]) over() as status FROM table a LEFT OUTER JOIN table AS b ON a.[nomer] = b.[nomer] GROUP BY a.nomer, a.kolvo Вы это хотели? |
17 фев 14, 14:52 [15577512] Ответить | Цитировать Сообщить модератору |
ELEKTpoHuK Member Откуда: Сообщений: 56 |
Благодарю! вот что получилось SELECT a.* FROM (select a.*, row_number() over(partition by a.nomer order by a.[status] DESC) NN from [lantsov].[dbo].[___dop_table_training] a) a where a.NN = 1 |
||
17 фев 14, 14:53 [15577523] Ответить | Цитировать Сообщить модератору |
ELEKTpoHuK Member Откуда: Сообщений: 56 |
Спасибо - буду разбираться. |
||
17 фев 14, 14:58 [15577567] Ответить | Цитировать Сообщить модератору |
ELEKTpoHuK Member Откуда: Сообщений: 56 |
буду читать про OVER() спасибо У меня выдает ошибку is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. |
||
17 фев 14, 14:59 [15577584] Ответить | Цитировать Сообщить модератору |
ELEKTpoHuK Member Откуда: Сообщений: 56 |
Я, кстати, читал этот пост раньше, но, как говорится - Гляжу в книгу - вижу фигу )) Более или менее разобрался. Спасибо. SELECT TOP 1 WITH TIES* FROM table a ORDER BY row_number() OVER(partition by a.nomer ORDER BY a.[status] DESC) |
||
17 фев 14, 15:13 [15577711] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |