2017-03-22 1 views
-3

ich einen Tisch Anwesenheits haben (SessionId, StudentID, IfPresent)Wie durch zwei Spalten Zahl und Gruppe verwenden, die unterschiedliche Klauseln in denen

S1, Stu001, 1 
S1, Stu002, 1 
S1, Stu003, 1 
S1, Stu004, 1 
S1, Stu005, 1 
S2, Stu001, 1 
S2, Stu002, 0 
S2, Stu065, 1 
S3, Stu003, 0 
. 
. 
. 

, die Informationen sammelt grundsätzlich über Schüler zu einer bestimmten Sitzung zugewiesen und Teilnahme daran.

Was ich will, ist ein Bericht wie dieser

Attendance_report (SessionId, Insgesamt Studenten, Attendance)

S13, 20, 18 
S15, 20, 17 
S56, 40, 28 

Die Teilnahme kommt eine Zählung mit IfPresent tun = 1 in der where-Klausel Insgesamt Studenten werden kommen aus einer Zählung ohne where-Klausel

+0

Können Sie einige Beispieldaten liefern –

+0

Hinzugefügt Probe Daten – traveloid

+1

MySQL oder SQL Server? Dies sind verschiedene Produkte. –

Antwort

2

Versuchen Sie, diese

Select SessionId, count(*) as [Total Students], 
sum(case when IfPresent = 1 then 1 else 0 end) as Attendance 
from Attendance_report 
group by SessionId 
+0

Das funktioniert. Vielen Dank. – traveloid

+0

Ihr Welcome @ traveloid –

1

Gruppe von SessionId, um eine Ergebniszeile pro Sitzung zu erhalten und die Aggregate bauen (die eine einfache Zählung und eine Summe in Ihrem Fall):

select 
    sessionid, 
    count(*) as total_students, 
    sum(ifpresent) as attendance 
from attendance 
group by sessionid; 
+0

Die Spalte ist irgendwie keine Zahl, also geben Sie einen Operandenfehler aber danke. Dies wird normal funktionieren. – traveloid

0
BEGIN TRAN 

Create Table #Attandance (Session_ID NVARCHAR(10),StudentId NVARCHAR(20), IfPresent INT) 
INSERT INTO #Attandance 
SELECT 'S1', 'Stu001', 1 UNION ALL 
SELECT 'S1', 'Stu002', 1 UNION ALL 
SELECT 'S1', 'Stu003', 1 UNION ALL 
SELECT 'S1', 'Stu004', 1 UNION ALL 
SELECT 'S1', 'Stu005', 1 UNION ALL 
SELECT 'S2', 'Stu001', 1 UNION ALL 
SELECT 'S2', 'Stu002', 0 UNION ALL 
SELECT 'S2', 'Stu065', 1 UNION ALL 
SELECT 'S3', 'Stu003', 0 


SELECT Session_ID,COUNT(*)[Total Students], 
SUM(IfPresent)from #Attandance 
GROUP BY Session_ID 

ROLLBACK TRAN 
Verwandte Themen