可以在一条语句中连接两条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
我想(通过KS
)连接这两个select
语句的结果
我尽量避免使用临时表,但如果这是唯一可行的方法,我想了解更多关于以这种方式使用临时表的信息。
我也尝试过对满足条件的行执行某种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
连接它们也可以,我现在了解了如何以这种方式连接多个select
发布于 2012-05-11 00:40:20
SELECT t1.ks, t1.[# Tasks], COALESCE(t2.[# Late], 0) AS [# Late]
FROM
(SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks) t1
LEFT JOIN
(SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks) t2
ON (t1.ks = t2.ks);
发布于 2012-05-11 00:40:36
尝试如下所示:
SELECT
*
FROM
(SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks) t1
INNER JOIN
(SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks) t2
ON t1.ks = t2.ks
发布于 2012-05-11 00:40:48
使用UNION
SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks
UNION
SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks
如果您想要重复项,则使用UNION ALL
:
SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks
UNION ALL
SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks
https://stackoverflow.com/questions/10538539
复制相似问题