Sql 如何获取使用子查询返回的列值的计数?
我想获取STAGING_CUST_acct表的acct_key列中不存在的所有hrc_acct_num。最后一个外部选择列抛出错误。如何获取使用子查询返回的列的计数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
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。个人