Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Group By по нескольким столбцам.  [new]
not1
Member

Откуда:
Сообщений: 9
Здравствуйте допустим есть такая таблица
ID Имя Улица Дом Квартира
0 Имя 0 ПРОСВЕЩЕНИЯ 58 35
1 Имя 1 Просвещения 58 35
2 Имя 2 Просвещения 68 35
3 Имя 3 Просвещения 70 3
4 Имя 4 Просвещения 70 4
5 Имя 5 ПРОСВЕЩЕНИЯ 80 4
6 Имя 6 Просвещения 80 4
7 Имя 7 Просвещения 80 4


Что я хочу получить ?
0 Имя 0 ПРОСВЕЩЕНИЯ 58 35
2 Имя 2 Просвещения 68 35
3 Имя 3 Просвещения 70 3
4 Имя 4 Просвещения 70 4
5 Имя 5 ПРОСВЕЩЕНИЯ 80 4

Грубо говоря Хочу сделать GroupBy по двум столбцам(Адресу и Квартиры).
Если написать так, как снизу то все отработает верно, однако не выведется ID, Имя, Фамилия.
SELECT  [ULICA] , [DOM] ,[KVART]
FROM [ARXIV].[dbo].[ARXIV]
GROUP BY [ULICA], [DOM], [KVART];


Если написать так
SELECT [ID],  [NAME],  [ULICA] , [DOM] ,[KVART]
FROM [ARXIV].[dbo].[ARXIV]
GROUP BY [ULICA], [DOM], [KVART];


Получаю ошибку
is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Вообщем помогите разобраться, не пойму почему GroupBy не группирует по конкретным столбцам.
18 июн 15, 12:34    [17786886]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
Glory
Member

Откуда:
Сообщений: 104751
not1
не пойму почему GroupBy не группирует по конкретным столбцам.

Потому что у вас в запросе есть поля, которые " it is not contained in either an aggregate function or the GROUP BY clause"
18 июн 15, 12:36    [17786903]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
not1,

что Вы понимаете под сделать GroupBy по двум столбцам(Адресу и Квартиры)?
У Вас и агрегатных функций-то нет.
Объясните, какой результат нужен.
Чем должен отличаться запрос с GROUP BY от запроса без GROUP BY?
18 июн 15, 12:45    [17786954]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
not1
Member

Откуда:
Сообщений: 9
В таблице названия столбцов есть [ID], [NAME].
Почему GroupBy не может cгруппировать по конкретным столбцам n? Ему требуется явно указать все.
Но если я укажу все то он выведет не то что я ожидал.
SELECT [ID],  [NAME],  [ULICA] , [DOM] ,[KVART]
FROM [ARXIV].[dbo].[ARXIV]
GROUP BY [ID],  [NAME],  [ULICA], [DOM], [KVART];


В итоге я приду откуда начал
ID Имя Улица Дом Квартира
0 Имя 0 ПРОСВЕЩЕНИЯ 58 35
1 Имя 1 Просвещения 58 35
2 Имя 2 Просвещения 68 35
3 Имя 3 Просвещения 70 3
4 Имя 4 Просвещения 70 4
5 Имя 5 ПРОСВЕЩЕНИЯ 80 4
6 Имя 6 Просвещения 80 4
7 Имя 7 Просвещения 80 4

Вопрос как сгруппировать по двум последним столбцам?
18 июн 15, 12:45    [17786955]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
not1
Вопрос как сгруппировать по двум последним столбцам?
Что такое "сгруппировать"?
18 июн 15, 12:45    [17786960]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
not1
Member

Откуда:
Сообщений: 9
Результат нужен чтобы из из таблицы вывелись уникальные записи, но только по двум последним столбцам.
18 июн 15, 12:46    [17786973]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
Glory
Member

Откуда:
Сообщений: 104751
not1
Почему GroupBy не может cгруппировать по конкретным столбцам n?

Причина оглашена в сообщении об ошибке. Вы его прочитали ?

not1
Вопрос как сгруппировать по двум последним столбцам?

Прочитать сообщение об ошибке и написать правильный запрос
18 июн 15, 12:47    [17786977]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
not1,

а в остальных столбцах что должно быть, что попало? Вы же не указываете в запросе, что для них выводить при условии уникальности двух выбранных столбцов.
18 июн 15, 12:48    [17786983]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
o-o
Guest
а с именами обитающих по одному адресу что надо делать, собрать в одну строку?
18 июн 15, 12:49    [17786992]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
not1
Member

Откуда:
Сообщений: 9
ну как же я не указываю? я же пишу что я хочу вывести :
Id, Nam, Ulica, Dom, Kvart
при этом записи должны быть сгруппированы по двум последним столбцам.
GROUP BY Dom, Kvart; // Но так нельзя надо указывать именно все столбцы.


SELECT [ID],  [NAME],  [ULICA] , [DOM] ,[KVART]
FROM [ARXIV].[dbo].[ARXIV]
GROUP BY  [DOM], [KVART]; <- тут указываю что сгруппировать надо по двум столбцам.


Ладно такой вопрос : как вывести из таблицы значения уникальные, при этом уникальность достигается по двум последним столбцам?
))
18 июн 15, 12:55    [17787041]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
Glory
Member

Откуда:
Сообщений: 104751
not1
ну как же я не указываю?

Прочитайте уже сообщение об ошибке. Пока не дойдет.

not1
Ладно такой вопрос : как вывести из таблицы значения уникальные, при этом уникальность достигается по двум последним столбцам?

Что брать из других полей нужно самим придумать ?
18 июн 15, 12:57    [17787060]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
not1,

допустим, Вы получили уникальную пару 1,2 из таблицы
f1f2f3
123
124
125


Что должен выбрать сервер для этой пары из таблицы - 3, 4 или 5, чтобы добавить к результату?

1,2,3 или 4 или 5?

Как бы Вы поступили на месте сервера?
18 июн 15, 13:14    [17787149]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
not1
как вывести из таблицы значения уникальные, при этом уникальность достигается по двум последним столбцам?

Каждой уникальной паре значений двух последних столбцов соответствует несколько разных групп значений из остальных столбцов. Какую из них следует отобразить? Сформулируйте чёткий и однозначный критерий выбора. А потом отобразите его в запросе.

Например, если требуется группа, где ID максимально, то запрос получится таким:

SELECT [ID],  [NAME],  [ULICA] , [DOM] ,[KVART]
FROM [ARXIV].[dbo].[ARXIV]
WHERE ID IN ( SELECT MAX(ID)
              FROM [ARXIV].[dbo].[ARXIV]
              GROUP BY [DOM], [KVART]
             )
18 июн 15, 13:14    [17787152]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Давайте по-порядку:

not1
записи должны быть сгруппированы по двум последним столбцам.
GROUP BY Dom, Kvart;


Что вы понимаете по словом "сгруппировать"?
18 июн 15, 13:29    [17787212]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
not1
Member

Откуда:
Сообщений: 9
Может я вопрос не правильно задал?..
Вот есть таблица :
ID_1 Имя_1 Москва 4
ID_2 Имя_2 Москва 5
ID_3 Имя_1 Москва 4
ID_4 Имя_2 Москва 6
ID_5 Имя_2 СП 6
ID_7 Имя_2 СП 6


Что я хочу? Вывести всю таблицу но где два последних столбца имеют уникальные значения.
Вот какой результат должен быть, для таблицы сверху.
ID_1 Имя_1 Москва 4
ID_2 Имя_2 Москва 5
ID_4 Имя_2 Москва 6
ID_5 Имя_2 СП 6


P.S вот как это сделать?.,
18 июн 15, 13:29    [17787215]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SQL2008
Давайте по-порядку:

not1
записи должны быть сгруппированы по двум последним столбцам.
GROUP BY Dom, Kvart;


Что вы понимаете по словом "сгруппировать"?
Баян!
17786960
18 июн 15, 13:30    [17787221]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
Glory
Member

Откуда:
Сообщений: 104751
not1
Может я вопрос не правильно задал?

Вы догадливый

not1
Вот какой результат должен быть, для таблицы сверху.
ID_1 Имя_1 Москва 4
ID_2 Имя_2 Москва 5
ID_4 Имя_2 Москва 6
ID_5 Имя_2 СП 6

Почему он именно такой ?
Почему для СП 6 выбраны именно ID_5 Имя_2 ? А не другие возможные комбинации
18 июн 15, 13:31    [17787227]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT TOP(1) WITH TIES *
FROM [ARXIV].[dbo].[ARXIV]
ORDER BY ROW_NUMBER()OVER(PARTITION BY [DOM], [KVART] ORDER BY [ID]); 
WITH CTE AS(SELECT N=ROW_NUMBER()OVER(PARTITION BY [DOM], [KVART] ORDER BY [ID]),* FROM [ARXIV].[dbo].[ARXIV])
SELECT * FROM CTE WHERE N=1;
И ещё десяток способов, зависящих от версии сервера.
18 июн 15, 13:34    [17787244]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
not1
Member

Откуда:
Сообщений: 9
автор
ID_5 Имя_2 СП 6

glory Потому что она 1ая в списке, второе потому что до этого не было значений СП 6.

P.S сорь за "неправильный вопрос" )
18 июн 15, 13:36    [17787258]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
Glory
Member

Откуда:
Сообщений: 104751
not1
Потому что она 1ая в списке,

А где поле, показывающее, что "она 1ая в списке" ?
Я лично не вижу никакой нумерации
18 июн 15, 13:37    [17787265]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
not1
Member

Откуда:
Сообщений: 9
iap СПС Вам большое, Ваше решение вроде как работает ))
18 июн 15, 13:42    [17787295]     Ответить | Цитировать Сообщить модератору
 Re: Group By по нескольким столбцам.  [new]
Добрый Э - Эх
Guest
not1,

почитай на досуге
18 июн 15, 13:49    [17787346]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить