Click here to Skip to main content
15,919,336 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
I HAVE DATA LIKE THIS

DATE         ID            CATEGORYCODE      AMOUNT
1/1/2013     100            DRIVER            10
1/1/2013     100            SALESMAN          100
1/1/2013     100            SALESEXEC         40
2/1/2013     100            DRIVER            60




WANT OUT PUT LIKE THIS

DATE       1D    DRIVER  SALESMAN   SALESEXEC
1/1/2013   100    10       100        40
2/1/2013   100    60
Posted

1 solution

Try this:
SQL
SELECT [DATE], [DRIVER], [SALESMAN], [SALESEXEC]
FROM (SELECT * FROM YourTable) AS DT
PIVOT(SUM([AMOUNT]) FOR [ID] IN ([DRIVER], [SALESMAN], [SALESEXEC])) AS PT
ORDER BY [DATE] 


[EDIT]
If you need dynamic columns, try this:
SQL
DECLARE @cols NVARCHAR(200)

SET @cols = STUFF((SELECT DISTINCT '],[' + [CATEGORYCODE]
					FROM YourTable
					ORDER BY '],[' + [CATEGORYCODE]
			FOR XML PATH('')),1,2,'') + ']'
SELECT [DATE], @cols
FROM (SELECT * FROM YourTable) AS DT
PIVOT(SUM([AMOUNT]) FOR [ID] IN (@cols)) AS PT
ORDER BY [DATE] 


[/EDIT]
 
Share this answer
 
v2
Comments
Mehdi Gholam 14-Feb-13 5:26am    
5'ed
Maciej Los 14-Feb-13 5:31am    
Thank you ;)
robinsonpaul 14-Feb-13 5:49am    
Okay this a goo answer need group by date form and able select category in in part as a qury..now its hard coded driver,salesman...any way thanks for this answer part
Maciej Los 14-Feb-13 6:35am    
If you need dynamic columns, see my answer after update.
CHill60 14-Feb-13 9:11am    
+5 - especially for the edit

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