【发布时间】:2012-05-19 07:02:37
【问题描述】:
是否可以在一个语句中加入 2 个 sql SELECT 语句的结果?
我有一个任务数据库,其中每条记录都是一个单独的任务,有截止日期(和PALT,这只是从开始到截止日期的INT。Age 也是INT 的天数。 )
我想要一个表格,其中包含表格中的每个人、他们拥有的任务数以及他们拥有的LATE 任务数(如果有的话)。
我可以轻松地在单独的表中获取这些数据,如下所示:
SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks
返回数据如:
ks # Tasks
person1 7
person2 3
然后我有:
SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks
返回:
ks # Late
person1 1
person2 1
我想加入这两个select 语句的结果(由KS)
我试图避免使用临时表,但如果这是唯一可行的方法,我想了解更多关于以这种方式使用临时表的信息。
我还尝试对满足条件的行进行某种count(),但我也不知道该怎么做。如果可能的话,那也行。
附录:
抱歉,我希望我的结果包含 KS、Tasks 和 Late 的列
KS # Tasks # Late
person1 7 1
person2 3 1
person3 2 0 (or null)
另外,我希望一个人即使没有迟到的任务也能出现。
SUM(CASE WHEN Age > Palt THEN 1 ELSE 0 END) Late
效果很好,感谢您的回答!
两个 select 语句也可以,使用 LEFT JOIN 加入它们也可以,我现在了解如何以这种方式加入多个 selects
【问题讨论】:
-
您没有给出预期结果的示例。因此,一些答案是连接结果。一些正在加入。你要哪一个?
-
抱歉,我希望我的结果包含 KS、Tasks 和 Late KS #Tasks # Late person1 7 1 person2 3 1 person3 2 0(或 null)即使他们没有迟到的任务。目前使用带有 LEFT JOIN 的两个 select 语句方法来实现这一点(与建议的 INNER JOIN 不同,它可以工作但不会显示没有迟到任务的人,因为他们不存在于第二个 SELECT 中也可以用迟到的方法实现这一点列是 SUM(CASE WHEN Age > Palt THEN 1 ELSE 0 END) Late