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