Click here to Skip to main content
15,891,981 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?

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.
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.
 
Share this answer
 
Comments
Maciej Los 8-Sep-15 12:27pm    
Great answer, 5!
Animesh Datta 8-Sep-15 12:29pm    
Thank You Sir .

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