Click here to Skip to main content
15,885,116 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more: , +
I have a Dynamic PIVOT query in which Columns are dynamically generated.

My table: ATTENDANCE_MASTER Contains: ID, Stud_id, ATT_DATE, PRESENT

which stores data like:

HTML
ID  Stud_id ATT_DATE   PRESENT
1     1     2015-08-1    1
2     2     2015-08-1    0
3     3     2015-08-1    1
4     1     2015-08-2    0
5     2     2015-08-2    1
6     3     2015-08-2    1


I have created PIVOT Query

SQL
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);

SET @columns = N'';
SELECT @columns += N', p.' + QUOTENAME(ATT_DATE)
  FROM (SELECT p.ATT_DATE FROM dbo.ATTENDANCE_MASTER AS p
  GROUP BY p.ATT_DATE) AS x;

SET @sql = N'SELECT Stud_id, ' + STUFF(@columns, 1, 2, '') + '
FROM
(
  SELECT p.ATT_DATE, p.Stud_id, p.PRESENT FROM dbo.ATTENDANCE_MASTER AS p
) AS j
PIVOT
(
  SUM(PRESENT) FOR ATT_DATE IN ('+ STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '') + ')
) AS p;';
PRINT @sql;
EXEC sp_executesql @sql;


I need sum of columns like

HTML
Stud_ID  2015-08-01   2015-08-2 2015-08-3 Total
1            1            0         1      2
2            1            1         1      3
3            1            1         0      2
4            0            0         1      1


Please suggest me solution.

Thanks in Advance.
Posted
Updated 24-Nov-16 5:43am
v2
Comments
Maciej Los 7-Sep-15 8:58am    
What have you tried? Where are you stuck?

 
Share this answer
 
Comments
Maciej Los 8-Sep-15 12:27pm    
Great answer, 5!
Animesh Datta 8-Sep-15 12:29pm    
Thank You Sir .
The logic is:
SQL
SELECT T.*, ([2015-08-01] + [2015-08-02] + [2015-08-03]) AS Total
FROM 
(
-- your dynamic query
) AS T


where [2015-08-01] + [2015-08-02] + [2015-08-03] commes from @columns variable ;)

Get it?
 
Share this answer
 
Comments
Wendelius 8-Sep-15 12:17pm    
Looks good.
Maciej Los 8-Sep-15 12:25pm    
Thank you, Mika.
Hi, I recently wrote an article talking about this. You can check it at Using PIVOT with SQL Server[^]

I hope it works for you!
 
Share this answer
 
Comments
Dave Kreskowiak 24-Nov-16 12:02pm    
Don't resurrect questions that are over a year old.

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