Выберите уникальные значения в виде столбцов и подсчитайте или сопоставьте их с каждым уникальным значением определенного столбца. - PullRequest
0 голосов
/ 21 июня 2019

У меня есть таблица с четырьмя столбцами: Id, Name, CampaignId, Type.

Вот пример:

+----+-----------+------------+------+
| Id |   NAME    | CampaignId | Type |
+----+-----------+------------+------+
|  1 | Campaign1 |         10 |    0 |
|  2 | Campaign2 |         11 |    0 |
|  3 | Campaign2 |         11 |    1 |
|  4 | Campaign2 |         11 |    2 |
|  5 | Campaign2 |         11 |    3 |
|  6 | Campaign3 |         12 |    1 |
|  7 | Campaign3 |         12 |    2 |
|  8 | Campaign3 |         12 |    2 |
|  9 | Campaign3 |         12 |    2 |
| 10 | Campaign4 |         13 |    0 |
| 11 | Campaign4 |         13 |    2 |
+----+-----------+------------+------+
DROP TABLE IF EXISTS #TMP;
CREATE TABLE #TMP (
    [Id] INT IDENTITY ,
    [NAME] NVARCHAR(20),
    [CampaignId] INT,
    [Type] INT
);

INSERT INTO #TMP ([Name], [CampaignId], [Type]) VALUES 
('Campaign1', 10, 0),
('Campaign2', 11, 0),
('Campaign2', 11, 1),
('Campaign2', 11, 2),
('Campaign2', 11, 3),
('Campaign3', 12, 1),
('Campaign3', 12, 2),
('Campaign3', 12, 2),
('Campaign3', 12, 2),
('Campaign4', 13, 0),
('Campaign4', 13, 2)

SELECT * FROM #TMP

Мне нужен запрос для создания новой таблицы, которая выведет строку, содержащую Name, CampaignId и столбцы для каждого уникального значения в Type с соответствующим количеством для каждого уникального CampaignId.

Я не знаю точное число и возможные значения в столбце Type.Это может быть иначе.

Ожидаемый результат для образца набора данных - таблица

+-----------+------------+-------+-------+-------+-------+
|   Name    | CampaignId | Type0 | Type1 | Type2 | Type3 |
+-----------+------------+-------+-------+-------+-------+
| Campaign1 |         10 |     1 |     0 |     0 |     0 |
| Campaign2 |         11 |     1 |     1 |     1 |     1 |
| Campaign3 |         12 |     0 |     1 |     3 |     0 |
| Campaign4 |         13 |     1 |     0 |     1 |     0 |
+-----------+------------+-------+-------+-------+-------+

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Попробуйте это:

SELECT name,
       campaignid,
       Type0=sum(case when type= 0 then 1 else 0 END ) ,
       Type1=sum(case when type= 1 then 1 else 0 END ) ,
       Type2=sum(case when type= 2 then 1 else 0 END ) ,
       Type3=sum(case when type= 3 then 1 else 0 END ) 
       FROM #TMP
       group by name,campaignid
0 голосов
/ 21 июня 2019

использовать условное агрегирование

selecr name,CampaignId,sum(case when  type =0 then 1 else 0 end) as type0,
sum(case when  type =1 then 1 else 0 end) as type1,
sum(case when  type =2 then 1 else 0 end) as type2,
sum(case when  type =3 then 1 else 0 end) as type3 from #TMP
group by name,CampaignId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...