syl*_*yre 156 sql select join group-by
是否可以在一个语句中加入2个sql SELECT语句的结果?我有任务的数据库,其中每个记录是一个单独的任务,最后期限(和P替换,这仅仅是一个从开始到最后期限的天INT,年龄也是天的INT数.)
我想有哪个人都有每个人的桌子上,他们有任务的数量,以及他们有LATE任务数表(如果有的话).
我可以轻松地在单独的表中获取这些数据,如下所示:
SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks
Run Code Online (Sandbox Code Playgroud)
返回数据如:
ks # Tasks
person1 7
person2 3
Run Code Online (Sandbox Code Playgroud)
然后我有
SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks
Run Code Online (Sandbox Code Playgroud)
返回:
ks # Late
person1 1
person2 1
Run Code Online (Sandbox Code Playgroud)
我想加入这两个选择语句的结果(由KS提供)
我试图避免使用临时表,但如果这是唯一可行的方法,我想了解更多关于以这种方式使用临时表的信息.
我也尝试做某种count()#行满足条件,但我也想不出怎么做.如果可能的话,那也会奏效.
附录:对不起,我希望我的结果包含KS,Tasks和Late的列
KS # Tasks # Late
person1 7 1
person2 3 1
person3 2 0 (or null)
Run Code Online (Sandbox Code Playgroud)
另外,即使他们没有迟到的任务,我也希望一个人出现.
SUM(年龄> Palt THEN 1 ELSE 0 END)后期效果很好,感谢您的回答!
两个select语句也可以工作,使用LEFT JOIN加入它们也可以工作,我现在明白了如何以这种方式连接多个选择.谢谢!
Phi*_*hil 238
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);
Run Code Online (Sandbox Code Playgroud)
Mit*_*dir 63
尝试这样的事情:
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
Run Code Online (Sandbox Code Playgroud)
aF.*_*aF. 36
用途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
Run Code Online (Sandbox Code Playgroud)
或者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
Run Code Online (Sandbox Code Playgroud)
Baz*_*nga 13
你可以使用UNION ALL关键字.
以下是在T-SQL中执行此操作的MSDN文档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
Nik*_*vić 13
如果Age和Palt是同一个表中的列,您可以计算(*)所有任务,并且只计算后期的任务,如下所示:
select ks,
count(*) tasks,
sum(case when Age > Palt then 1 end) late
from Table
group by ks
Run Code Online (Sandbox Code Playgroud)