Click here to Skip to main content
15,923,219 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi,

I have a table like this below.
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

I need output as below
TypeId   New  New1  New2
1         2    0     0
2         0    1     0
3         0    1     0
4         0    0     2

Thanks in advance.

What I have tried:

SQL
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;

But result is not as expected.
Posted
Updated 3-Aug-17 23:00pm
v2

You have to group the result by typeid...
SQL
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
 
Share this answer
 
select * from (
SELECT TypeId,
StatusId,
StatusName FROM #TaskTable
)as gg

PIVOT(
Count(StatusId)
FOR StatusName IN(
[New],
[New1],
[New2])
) P;
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900