236

是否可以在一个语句中加入 2 个 sqlSELECT语句的结果?我有一个任务数据库,其中每条记录都是一个单独的任务,有截止日期(和 a 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()满足条件的行,但我也不知道该怎么做。如果可能的话,那也行。

附录:抱歉,我希望我的结果包含KSTasks和列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 语句也可以,使用 aLEFT JOIN来加入它们也可以,我现在明白了如何以select这种方式加入多个 s

4

5 回答 5

355
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-10T16:40:20.333 回答
105

尝试这样的事情:

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-10T16:40:35.943 回答
59

使用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
于 2012-05-10T16:40:48.077 回答
19

如果 Age 和 Palt 是同一个表中的列,则可以对所有任务进行计数(*)并仅对迟到的任务求和,如下所示:

select ks,
       count(*) tasks,
       sum(case when Age > Palt then 1 end) late
  from Table
 group by ks
于 2012-05-10T16:42:35.083 回答
17

您可以UNION ALL为此使用关键字。

这是在 T-SQL http://msdn.microsoft.com/en-us/library/ms180026.aspx中执行此操作的 MSDN 文档

UNION ALL - 合并结果集

UNION - 执行类似 Set Union 的操作并且不输出重复值

对于一个例子的区别: http: //sql-plsql.blogspot.in/2010/05/difference-between-union-union-all.html

于 2012-05-10T16:38:49.420 回答