我是SQL的新手,目前正在尝试学习如何在Visual Studio中制作报表。我需要制作一张表格,图表和其他一些东西。我决定做矩阵的最后一部分,现在我陷入了困境。我在SQL Server中编写查询。
我有两个表:Staff(empID,StaffLevel,姓氏)和WorkOfArt(artID,名称,策展人,helpingCurator)。在Curator和HelpingCurator列中,我使用了empID中的数字。
我希望我的矩阵显示每个empID以及充当策展人的绘画数量以及充当帮助策展人的绘画数量(所以我想三列:empID,count(curator) ,count(helpingCurator)。
Select Staff.empID, count(WorkOfArt.Curator) as CuratorTotal
FROM Staff, WorkOfArt
WHERE Staff.empID=WorkOfArt.Curator
and Staff.StaffLevel<7
group by Staff.empID;
Select Staff.empID, count(WorkOfArt.HelpingCurator) as HelpingCuratorTotal
FROM Staff, WorkOfArt
WHERE Staff.empID=WorkOfArt.HelpingCurator
and Staff.StaffLevel<7
group by Staff.empID;
我创建了这两个查询,它们工作得很好,但是我需要在一个查询中使用它。
我试过了:
Select Staff.empID, count(WorkOfArt.Curator) as CuratorTotal,
COUNT(WorkOfArt.HelpingCurator) as HelpingCuratorTotal
FROM Staff FULL OUTER JOIN WorkOfArt on Staff.empID=WorkOfArt.Curator
and Staff.empID=WorkOfArt.HelpingCurator
WHERE Staff.StaffLevel<7
group by Staff.empID;
(以及使用左或右外部联接)-这给了我一张带有empID的表,但是在两个count列中只有0-和:
Select Staff.empID, count(WorkOfArt.Curator) as CuratorTotal,
COUNT(WorkOfArt.HelpingCurator) as HelpingCuratorTotal
FROM Staff, WorkOfArt
WHERE Staff.empID=WorkOfArt.Curator
and Staff.empID=WorkOfArt.HelpingCurator
and Staff.StaffLevel<7
group by Staff.empID;
而这只是给我列的名称。
我不知道下一步该怎么做。我试图在google中找到答案,但是我发现的所有解释对我来说都更为先进,因此我无法理解它们……您能帮我吗?提示也很好。
最简单的方法是在select子句中使用内部select,如下所示:
Select
S.empID,
(select count(*) from WorkOfArt C where C.Curator = S.empID)
as CuratorTotal,
(select count(*) from WorkOfArt H where H.HelpingCurator = S.empID)
as HelpingCuratorTotal
FROM Staff S
WHERE S.StaffLevel<7
group by S.empID;
这样,具有不同角色的行不会引起计算问题。如果表确实很大,或者您有许多不同的角色,则最有可能在WorkOfArt表中首先对项目进行分组的更复杂的查询可能会具有更好的性能,因为这需要读取两次行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句