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

Откуда:
Сообщений: 134
Доброй ночи.

Не могу придумать как заюзать функцию count() в группировке по другому полю (кейс ведь не будет правильно работать для такого случая). Цель запроса - получить значения колонки, по которой группируем + 2 колонки со значением к-ва записей в колонке LocationType, где значение равно 'New', а для третьей колонки - LocationType равен 'Old'

Есть пример таблички:
CREATE TABLE dbo.Events
	(
	Id bigint NOT NULL IDENTITY (1, 1),
	GroupId bigint NULL,
	LocationType nvarchar(50) NOT NULL
	); 


Вот данные для примера:

INSERT INTO Events (GroupId, LocationType) VALUES(1, 'New');
INSERT INTO Events (GroupId, LocationType) VALUES(1, 'Old');
INSERT INTO Events (GroupId, LocationType) VALUES(2, 'New');
INSERT INTO Events (GroupId, LocationType) VALUES(3, 'New');


Результат, который ожидаю увидеть:
GroupId LocationTypeNew LocationTypeOld
1 1 1
2 1 0
3 1 0

Помогите плз составить запрос или понять как делать. Пробывал вариант с
select GroupId, sum(CASE LocationType WHEN 'New' THEN 1 ELSE 0 END) as NewTotal from Events group by GroupId 
8 окт 14, 00:56    [16673910]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и фильтр к-ва по значению для колонки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ciget
Пробывал вариант с
И чем этот вариант не устроил?
8 окт 14, 01:17    [16673954]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и фильтр к-ва по значению для колонки  [new]
NickAlex66
Member

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

На ночь глядя родился только такой вариант:
SELECT
e2.GroupId,
(SELECT COUNT(*) FROM Events e1 WHERE e1.LocationType = N'New' AND e1.GroupId = e2.GroupId) LocationTypeNew,
(SELECT COUNT(*) FROM Events e1 WHERE e1.LocationType = N'Old' AND e1.GroupId = e2.GroupId) LocationTypeOld
FROM Events e2
GROUP BY GroupId
8 окт 14, 02:16    [16674011]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и фильтр к-ва по значению для колонки  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
Гавриленко Сергей Алексеевич
Ciget
Пробывал вариант с
И чем этот вариант не устроил?

добавляйте вторую сумму и будет вам счастье
select GroupId
, sum(CASE LocationType WHEN 'New' THEN 1 ELSE 0 END) as LocationTypeNew
, sum(CASE LocationType WHEN 'Old' THEN 1 ELSE 0 END)  as LocationTypeOld
from Events group by GroupId
8 окт 14, 07:05    [16674091]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и фильтр к-ва по значению для колонки  [new]
NickAlex66
Member

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

+1 - утро вечера мудренее :)
8 окт 14, 08:04    [16674159]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить