#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