sql server 2012中的复杂子查询
我有两张桌子 1.主修课程包含sql server 2012中的复杂子查询,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我有两张桌子 1.主修课程包含 AM_ID Attend_Date Time_From Time_To Course_ID Subject_ID 1 2014-03-10 10:00 11:00 1 22 2 2014-03-10 10:00 11:00 1 23 第二个孩子 CA_ID AM_ID Roll_No Attendance 1 1 1 1 2
AM_ID Attend_Date Time_From Time_To Course_ID Subject_ID
1 2014-03-10 10:00 11:00 1 22
2 2014-03-10 10:00 11:00 1 23
第二个孩子
CA_ID AM_ID Roll_No Attendance
1 1 1 1
2 1 2 0
3 1 3 1
4 2 1 1
我想要这样的结果
Subject_ID Total_Absenty Total_Lectures
22 2 10
23 5 11
我试过了
select AM.Subject_ID, count(AC.Attendance) as Attendance
,
(
select count(AC1.Attendance) from Attend_Child AC1
inner join Attend_Master AM1 on AC1.TT_ID = AM1.TT_ID
where AC1.Roll_No = 3 AND AM1.Course_ID = 1 AND DATENAME(Month, AM1.Attend_Date) = 'March'
)
from Attend_Child AC
inner join Attend_Master AM on AC.TT_ID = AM.TT_ID
where AC.Roll_No = 3 AND AM.Course_ID = 1 AND AC.Attendance = 0 AND DATENAME(Month, AM.Attend_Date) = 'March'
group by AM.Subject_ID, AM.subject_Type
通过使用这个,我得到了错误的结果。
如何在子查询中使用group by?在我看来,您似乎忽略了表中的一些字段……我可以问一下复杂的子查询在哪里吗?我的意思是,我习惯了2-3页长的查询。。。。这一点都不复杂。嗨,丹尼尔E。谢谢你的回复1。TT_ID错误地是它的AM_ID 2。AC.Roll_No是特定学生的注册号。如果我想查看特定学生的结果。3.不需要AM.subject\u类型。您可以始终将Roll\u ID添加到select和group by以获得单独的结果…我通过键盘传递Roll\u ID。我只想得到被选中的学生的结果。
DECLARE @CourseID INT =1
DECLARE @Month varchar(10)='March'
SELECT m.SubjectID
,Count(*) [Lectures] --count of all classes attended or not
,Count(*)-SUM(c.Attendance) [Absences]--count of all - attended classes
FROM Attend_Master m
INNER JOIN Attend_Child c
ON m.AM_ID=c.AM_ID --WHAT IS TT_ID?
WHERE m.CourseID=@CourseID
DATENAME(Month, m.Attend_Date) = @Month
--AC.Roll_No = 3 --WHAT DOES THIS DO FOR YOU?
GROUP BY M.Subject_ID
--, AM.subject_Type --WHERE DID THIS COME FROM?