我正在尝试拍摄数据库中某些表的状态的“快照”。我已经完成了其中的一些,目前正在处理最后一个,但是对于最后一个,我需要查询两个不同的表。
到目前为止已经尝试过以下方法:
SELECT
COUNT(Name) as CRIT,
branch
FROM(
SELECT
A.Name,
A.branch,
B.score,
B.last_found
FROM
TableA as A
INNER JOIN TableB as B ON A.Name= V.Name
WHERE
B.state <> 'DONE'
AND DATEDIFF(day, B.last_found, GETDATE()) > 30
AND CAST(B.score as float) > 8) AS X
GROUP BY
branch
我可以稍微修改一下代码:
SELECT
COUNT(Name) as LOW,
branch
FROM(
SELECT
A.Name,
A.branch,
B.score,
B.last_found
FROM
TableA as A
INNER JOIN TableB as B ON A.Name= V.Name
WHERE
B.state <> 'DONE'
AND DATEDIFF(day, B.last_found, GETDATE()) > 30
AND CAST(B.score as float) < 4) AS X
GROUP BY
branch
这又是我需要的另一部分。最终输出应该是上述两个查询的组合,并且应该有 3 列:
CRIT 低分支
如果我不清楚,请原谅并感谢您的帮助!!
您想要条件聚合:
SELECT
a.branch,
COUNT(CASE WHEN CAST(b.score as float) > 8 THEN 1 END) AS crit,
COUNT(CASE WHEN CAST(b.score as float) < 4 THEN 1 END) AS low
FROM tablea AS a
INNER JOIN tableb AS b ON b.name = a.name
WHERE b.state <> 'DONE'
AND DATEDIFF(day, b.last_found, GETDATE()) > 30
GROUP BY a.branch;