Выделять отдельные строки по первому столбцу и максимум по второму

#sql #tsql #group-by #distinct

#sql #tsql #группировать по #различные

Вопрос:

У меня есть следующая таблица:

 Item           Prod        Company
1.00961.501    PR011798    ditto
1.00961.501    PR012042    ditto
1.00961.501    PR013442    Pika
1.00961.502    PR012043    ditto
1.00961.503    PR011959    ditto
1.00961.503    PR011669    Bulb
1.00961.507    PR014783    ditto
1.00961.507    PR012050    ditto
  

Я хотел бы выбрать всю таблицу, сгруппированную, Item взяв только max Prod . Что-то вроде этого:

 Item           Prod        Company
1.00961.501    PR012042    ditto
1.00961.502    PR012043    ditto
1.00961.503    PR011959    ditto
1.00961.507    PR014783    ditto
  

Я попробовал следующее:

 SELECT  DISTINCT Item, MAX(Prod)
FROM    DataBase
WHERE   Company = 'ditto'
  

но это дает мне

Column 'Item' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Если я удалю MAX предложение, оно не возвращает ошибок, но Item повторяется для каждого Prod .

Есть идея?

Редактировать

Я забыл добавить Where предложение к вопросу. Когда я делаю это и пытаюсь использовать Group By вместо Distinct , я получаю следующую ошибку:

Column 'Company' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Комментарии:

1. Вам нужно добавить GROUP BY Item в конце вашего запроса.

2. Кстати, ВЫБИРАТЬ DISTINCT не требуется, поскольку GROUP BY не возвращает дубликатов.

3. Кстати, database — очень неудачное название таблицы. Выберите имя, которое имеет смысл.

4. База данных — это случайное имя, которое я написал здесь, потому что я не хотел указывать реальное имя базы данных: P Я отредактировал свой вопрос, добавив дополнительные материалы. Группировать по не работает.

5. Вам нужны только результаты для Company = ‘ditto’, или вам нужны результаты в целом?

Ответ №1:

Ваш запрос должен быть таким;

 SELECT  Item, MAX(Prod),Company
FROM    DataBase
WHERE   Company = 'ditto'
GROUP BY Item,Company;
  

Ответ №2:

Вам нужно разделить продукт, а затем выбрать один из этого раздела.

Вам следует попробовать следующий запрос.

 выберите товар, продукт, компанию из 
( 
 выберите *, 
 (ROW_NUMBER() поверх (разделение по порядку элементов по Prod DESC)) как строка из [имя_таблицы] 
 где Company = 'то же самое'
 ) t, где строка = 1