Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Select из нескольких строк одной с max значением вместе с другими (различающимися) полями  [new]
ELEKTpoHuK
Member

Откуда:
Сообщений: 56
Друзья, помогите пожалуйста, что-то не получается самому разобраться, при этом кажется, что ответ на поверхности.
Поиском отыскать не удалось.
есть таблица вида

nomer kolvo status name
X749 5 NULL Иванов
X749 5 NULL Петров
X749 5 4 Сидоров


Мне из нее необходимо выбрать строку где 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]     Ответить | Цитировать Сообщить модератору
 Re: Select из нескольких строк одной с max значением вместе с другими (различающимися) полями  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
ROW_NUMBER()
17 фев 14, 14:16    [15577190]     Ответить | Цитировать Сообщить модератору
 Re: Select из нескольких строк одной с max значением вместе с другими (различающимися) полями  [new]
Добрый Э - Эх
Guest
ELEKTpoHuK,

Ссылко
17 фев 14, 14:46    [15577463]     Ответить | Цитировать Сообщить модератору
 Re: Select из нескольких строк одной с max значением вместе с другими (различающимися) полями  [new]
Алексей Куренков
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]     Ответить | Цитировать Сообщить модератору
 Re: Select из нескольких строк одной с max значением вместе с другими (различающимися) полями  [new]
ELEKTpoHuK
Member

Откуда:
Сообщений: 56
tpg
ROW_NUMBER()


Благодарю!
вот что получилось

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]     Ответить | Цитировать Сообщить модератору
 Re: Select из нескольких строк одной с max значением вместе с другими (различающимися) полями  [new]
ELEKTpoHuK
Member

Откуда:
Сообщений: 56
Добрый Э - Эх
ELEKTpoHuK,

Ссылко


Спасибо - буду разбираться.
17 фев 14, 14:58    [15577567]     Ответить | Цитировать Сообщить модератору
 Re: Select из нескольких строк одной с max значением вместе с другими (различающимися) полями  [new]
ELEKTpoHuK
Member

Откуда:
Сообщений: 56
Алексей Куренков
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


Вы это хотели?


буду читать про 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]     Ответить | Цитировать Сообщить модератору
 Re: Select из нескольких строк одной с max значением вместе с другими (различающимися) полями  [new]
ELEKTpoHuK
Member

Откуда:
Сообщений: 56
Добрый Э - Эх
ELEKTpoHuK,

Ссылко


Я, кстати, читал этот пост раньше, но, как говорится - Гляжу в книгу - вижу фигу )) Более или менее разобрался. Спасибо.

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 Ответить