Member 8478234 Ответов: 2

Как разложить столбец в SQL


Привет,

У меня есть такая таблица ниже.
TaskId StatusId StatusName TypeId
1         189       New       1
2         199       New1      2
3         189       New       1
4         199       New1      3
5         190       new2      4
6         190       new2      4

Мне нужен вывод, как показано ниже
TypeId   New  New1  New2
1         2    0     0
2         0    1     0
3         0    1     0
4         0    0     2

Заранее спасибо.

Что я уже пробовал:

CREATE TABLE #TaskTable
(TaskId INT, StatusId INT, StatusName VarChar(50), TypeId INT);
GO
 
INSERT INTO #TaskTable VALUES(1,189,'New',1);
INSERT INTO #TaskTable VALUES(2,199,'New1',2);
INSERT INTO #TaskTable VALUES(3,189,'New',1);
INSERT INTO #TaskTable VALUES(4,199,'New1',3);
INSERT INTO #TaskTable VALUES(5,190,'New2',4);
INSERT INTO #TaskTable VALUES(6,190,'New2',4);

SELECT *
FROM #TaskTable

SELECT *
FROM #TaskTable
  PIVOT(Count(StatusId)  
  FOR StatusName IN([New], [New1],[New2]) 
  ) P;

Но результат не такой, как ожидалось.

2 Ответов

Рейтинг:
19

Kornfeld Eliyahu Peter

Вы должны сгруппировать результат по typeid...

WITH PIVOTED
AS (
	SELECT *
	FROM #TASKTABLE
		PIVOT(COUNT(STATUSID)  
			FOR STATUSNAME IN([NEW], [NEW1],[NEW2]) 
		) P
)
SELECT 
	TYPEID,
	SUM(NEW) AS NEW,
	SUM(NEW1) AS NEW1,
	SUM(NEW2) AS NEW2
FROM PIVOTED
GROUP BY TYPEID


Рейтинг:
1

Santosh kumar Pithani

выберите * из (
Выберите TypeId,
StatusId,
Имя состояния из #TaskTable
)как ГГ

СТЕРЖЕНЬ(
Граф (StatusId)
Для StatusName IN(
[Новый],
[Сайт new1],
[Новый2])
) П;