Click here to Skip to main content
15,894,306 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Please help someone!
I have a table in name of Mark_Attendance which contains columns like
[Class] | [S_Adm_No] |  [Alias], | [DateTime] 


To get my result I am using a sql query like

SELECT * FROM(SELECT [Class] ,[S_Adm_No], [Alias],DATENAME(M, [DateTime])as [Month],
DAY([DateTime]) as [DayValue] FROM [Mark_Attendance]) as Composite PIVOT (MAX([Alias]) 
FOR [DayValue] IN ([1], [2], [3], [4],[5], [6], [7], [8], [9],[10], [11], [12], [13], [14],[15], 
[16], [17], [18], [19],[20], [21], [22], [23], [24],[25], [26], [27], [28], [29],[30],[31])) 
AS PivotTable where [Month] = 'May' and Class ='Nur-A'


This query is showing value like

Class | S_Adm_NO | Month | 1 | 2 | 3 | 4 | 5 | 6 | 7 | and so on 
Nur-A | 1101     | April | A | P | P | P | P | A | A | 
Nur-A | 1102     | April | P | P | P | P | P | A | A | 
Nur-A | 1103     | April | A | P | A | P | P | P | P | 


My question is how can I count P and A separately like.

Class | S_Adm_NO | Month | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Total_P  | Total_A 
Nur-A | 1101     | April | A | P | P | P | P | A | A |  4       | 3
Nur-A | 1102     | April | P | P | P | P | P | A | A |  5       | 2
Nur-A | 1103     | April | A | P | A | P | P | A | A |  3       | 4


What I have tried:

SQL
SELECT * FROM(
                               SELECT [Class] ,
                                      [S_Adm_No], 
                                      [Alias],
                                      DATENAME(M, [DateTime])as [Month],
                                      DAY([DateTime]) as [DayValue] 
                               FROM [View_SMS_Mark_Attendance]) as Composite PIVOT (MAX([Alias]) 
                               FOR [DayValue] IN ([1], [2], [3], [4],[5], [6], [7],
                                                  [8], [9],[10], [11], [12], [13],
                                                  [14],[15],[16], [17], [18], [19],
                                                  [20], [21], [22], [23], [24],[25],
                                                  [26], [27], [28], [29],[30],[31])
            ) 
AS PivotTable 
where [Month] = 'May' and Class ='Nur-A'
Posted
Updated 2-Jul-17 22:25pm
v4

1 solution

Try to join a table with
SQL
SELECT pt.[Class], pt.[S_Adm_No], pt.[1], pt.[2], ..., pt.[31], at.[SumOfP], at.[SumOfA]
    FROM (
        SELECT [Class], [S_Adm_No], [Alias],DATENAME(M, [DateTime])as [Month], DAY([DateTime]) as [DayValue] 
        FROM [View_SMS_Mark_Attendance]) as Composite
        WHERE [Month] = 'May' and Class ='Nur-A'
        PIVOT (MAX([Alias]) FOR [DayValue] IN ([1], [2], [3], [4],[5], [6], [7],
                                                  [8], [9],[10], [11], [12], [13],
                                                  [14],[15],[16], [17], [18], [19],
                                                  [20], [21], [22], [23], [24],[25],
                                                  [26], [27], [28], [29],[30],[31])
            ) AS pt LEFT JOIN (
       SELECT [Class], [S_Adm_No], SUM(CASE WHEN [Alias] = 'P' THEN 1 ELSE 0 END) AS SumOfP, SUM(CASE WHEN [Alias] = 'A' THEN 1 ELSE 0 END) AS SumOfA
       FROM  [View_SMS_Mark_Attendance] 
       GROUP BY [Class], [S_Adm_No]
           ) AS at ON pt.[Class] = at.[Class] AND pt.[S_Adm_No] = at.[S_Adm_No]


For further details, please see: Visual Representation of SQL Joins[^]
 
Share this answer
 
Comments
nityanand NCR 9-Jul-17 4:18am    
5
Maciej Los 9-Jul-17 4:39am    
Thank you.

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