join两个SELECT语句结果
是否有可能在一个语句中join2个SQL SELECT语句的结果? 我有一个任务数据库,其中每个logging是一个单独的任务,具有截止date(和一个PALT,从开始到截止date只是一个INT天数,年龄也是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
我想join这两个select陈述的结果(由KS)
我试图避免使用临时表,但如果这是唯一可行的方法来做到这一点,我想知道更多关于以这种方式使用临时表。
我也尝试做一些满足条件的count()行,但我无法弄清楚如何做到这一点。 如果可能的话,那也可以。
附录:对不起,我希望我的结果有KS,Tasks和Late的列
KS # Tasks # Late person1 7 1 person2 3 1 person3 2 0 (or null)
另外,即使他们没有迟到,我也希望有人出现。
SUM(当年龄> Palt THEN 1 ELSE 0 END时的情况)迟到了,谢谢你的回答!
两个select语句也可以工作,使用一个LEFT JOIN来join它们也是可行的,现在我明白了如何以这种方式join多个select。 谢谢!
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
尝试这样的事情:
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
使用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
如果Age和Palt是同一个表中的列,则可以计算(*)所有任务,并只计算如下所示的最后一个:
select ks, count(*) tasks, sum(case when Age > Palt then 1 end) late from Table group by ks
你可以使用UNION ALL
关键字。
这里是MSDN文档在T-SQL中执行http://msdn.microsoft.com/en-us/library/ms180026.aspx
UNION ALL – 组合结果集
UNION-像Set Union一样,不会输出重复的值
有关示例的区别: http : //sql-plsql.blogspot.in/2010/05/difference-between-union-union-all.html