[英]Transact-SQL Sub Query
我正在努力寻找完成子查询的逻辑,或者至少我认为这是必需的! 我将展示我所拥有的:
SELECT CH.SFA,
convert(datetime, RE.START_DATE, 103) AS 'START DATE',
Count(Distinct CH.CHNO) AS 'TOTAL CH',
Count(CH.STATUS) AS 'COMPLETED CH',
count(distinct CH.CHNO + CH.STATUS) As 'COMPLETED CH2'
FROM CUSTOMER.dbo. CH CH, CUSTOMER.dbo.RE RE
WHERE
RE.SFA = CH.SFA
GROUP BY
CH.SFA, RE.START_DATE
我想做的是在已完成CH2的地方指定状态,它以C结尾,“状态”列为空白或C,通过对CHNO和C进行不同的计数,共同得出所需的结果,但是我我一辈子都找不到如何写的!
我正在使用Microsoft Query将数据源中的数据直接导入Excel电子表格中。
非常感谢您的关注。
自从我使用MS Query以来已经很老了,所以我对语法不了解,但这是如何编写一个包含WHERE
子句和聚合的子查询的总体思路,以帮助您入门:
SELECT
CH.SFA,
convert(datetime, RE.START_DATE, 103) AS 'START DATE',
Count(DISTINCT CH.CHNO) AS 'TOTAL CH',
Count(CH.STATUS) AS 'COMPLETED CH',
CCH.COMPLETED_CH2 AS 'COMPLETED CH2'
FROM CUSTOMER.dbo.CH CH
INNER JOIN CUSTOMER.dbo.RE RE
ON RE.SFA = CH.SFA
LEFT JOIN (
SELECT SFA, COUNT(DISTINCT CH.CHNO) AS COMPLETED_CH2
FROM CUSTOMER.dbo.CH
WHERE STATUS = 'C'
GROUP BY SFA
) AS CCH
ON RE.SFA = CCH.SFA
GROUP BY CH.SFA, RE.START_DATE
如果您只想知道CH.STATUS = 'C'
的记录数,则可以添加另一个带有CASE
逻辑的COUNT
语句。
COUNT(CASE WHEN CH.STATUS = 'C' then 1 else null end) as 'COMPLETED CH2'
当结合COUNT
和CASE
语句时,切记ELSE
语句为NULL
,否则将对所有行进行计数。
作为替代,您可以用SUM
SUM(CASE WHEN CH.STATUS = 'C' then 1 else 0 end) as 'COMPLETED CH2'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.