Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何获取使用子查询返回的列值的计数?_Sql_Sql Server_Count_Subquery_Aggregate Functions - Fatal编程技术网

Sql 如何获取使用子查询返回的列值的计数?

Sql 如何获取使用子查询返回的列值的计数?,sql,sql-server,count,subquery,aggregate-functions,Sql,Sql Server,Count,Subquery,Aggregate Functions,我想获取STAGING_CUST_acct表的acct_key列中不存在的所有hrc_acct_num。最后一个外部选择列抛出错误。如何获取使用子查询返回的列的计数 SELECT source_sys_cd, Count(CASE WHEN is_delete = 0 THEN 1 END) [DEL IS 0], Sum(CASE WHEN trans_amt = 0 THE

我想获取STAGING_CUST_acct表的acct_key列中不存在的所有hrc_acct_num。最后一个外部选择列抛出错误。如何获取使用子查询返回的列的计数

SELECT source_sys_cd, 
       Count(CASE 
               WHEN is_delete = 0 THEN 1 
             END) [DEL IS 0], 
       Sum(CASE 
             WHEN trans_amt = 0 THEN 1 
             ELSE 0 
           END)   [STG $0 TXN CNT], 
       Count(CASE 
               WHEN hrc_acct_num NOT IN(SELECT DISTINCT acct_key 
                                        FROM   staging_cust_acct) THEN 
               hrc_acct_num 
             END) 
FROM   staging_transactions (nolock) 
GROUP  BY source_sys_cd 
ORDER  BY source_sys_cd  

可以对子查询执行左联接,然后在值为null时执行求和。会计键

SELECT source_sys_cd, 
       Count(CASE 
               WHEN is_delete = 0 THEN 1 
             END) [DEL IS 0], 
       Sum(CASE 
             WHEN trans_amt = 0 THEN 1 
             ELSE 0 
           END)   [STG $0 TXN CNT], 
       SUM(CASE WHEN T.acct_key is NULL THEN 1 else 0  END ) CountNotIN

FROM   staging_transactions (nolock) s
       LEFT JOIN (SELECT DISTINCT acct_key 
                                        FROM   staging_cust_acct) t 
        s.hrc_acct_num  = t.acct_key 
GROUP  BY source_sys_cd 
ORDER  BY source_sys_cd  

您可以使用“不存在”短接子查询。它比LEFT-JOIN-SELECT-DISTINCT更有效,因为您不关心枚举它存在的所有时间

   SELECT source_sys_cd, 
           Count(CASE is_delete WHEN 
                   WHEN is_delete = 0 THEN 1 
                 END) [DEL IS 0], 
           Count(CASE 
                   WHEN trans_amt = 0 THEN 1 
                 END) [STG $0 TXN CNT], 
           Count(CASE 
                   WHEN NOT EXISTS (SELECT 1
                                    FROM staging_cust_acct
                                    WHERE acct_key = hrc_acct_num) THEN 1
                 END) 
    FROM   staging_transactions (nolock)
    GROUP  BY source_sys_cd 
    ORDER  BY source_sys_cd  

Sum在这种情况下也会起作用,但是,count不会增加null值,如果条件不为true,则会从case语句返回null值。在这种情况下,@JaazCole您是对的。出于某种原因,我在那里读到了另一个0。个人