繁体   English   中英

Transact-SQL子查询

[英]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'

当结合COUNTCASE语句时,切记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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM