我有以下疑问:
SELECT TOP 500
BusinessDate,
BRANCH_CO_MNE,
RIGHT(TRANS_INPUTTER, 5) 'USER_ID',
CASE
WHEN TRANS_TYPE LIKE '%Deposit%'
THEN COUNT(*)
END 'No of Cash Deposit'
FROM test_link.MMBL_phase2.dbo.EB_MMBL_H_UAR_PROT
WHERE BusinessDate = '2023-01-23'
GROUP BY BusinessDate,
BRANCH_CO_MNE,
TRANS_INPUTTER,
TRANS_TYPE
ORDER BY USER_ID
返回以下结果:
| 业务日期|分公司|用户ID|现金存款数|
| - ------|- ------|- ------|- ------|
| 二〇二三年一月二十三日|印度国家银行|小行星10938|零|
| 二〇二三年一月二十三日|印度国家银行|小行星10938|零|
| 二〇二三年一月二十三日|印度国家银行|小行星10938|零|
| 二〇二三年一月二十三日|印度国家银行|小行星10938|零|
| 二〇二三年一月二十三日|印度国家银行|小行星10938|零|
| 二〇二三年一月二十三日|印度国家银行|小行星11748|零|
| 二〇二三年一月二十三日|印度国家银行|小行星11748|零|
| 二〇二三年一月二十三日|印度国家银行|小行星11748|零|
| 二〇二三年一月二十三日|印度国家银行|小行星11748|零|
| 二〇二三年一月二十三日|印度国家银行|小行星11748|零|
| 二〇二三年一月二十三日|印度国家银行|小行星11748|十八|
| 二〇二三年一月二十三日|印度国家银行|小行星11748|零|
当我将No of Cash Deposit
放入GROUP BY子句时,NULL
值重复。
结果不应该是
| 业务日期|分公司|用户ID|现金存款数|
| - ------|- ------|- ------|- ------|
| 二〇二三年一月二十三日|印度国家银行|小行星10938|零|
| 二〇二三年一月二十三日|印度国家银行|小行星11748|十八|
| 二〇二三年一月二十三日|印度国家银行|小行星11748|零|
4条答案
按热度按时间i7uaboj41#
我怀疑这里的问题是你尝试了条件聚合。对于条件聚合,聚合函数不进入
CASE
表达式,CASE
表达式被放入聚合函数。作为你的方法的结果,你 * 有 * 到GROUP BY
列TRANS_INPUTTER
,因为它没有被聚合。如果切换到条件聚集,则可以从
GROUP BY
中删除TRANS_TYPE
。此外,还需要将TRANS_INPUTTER
上的GROUP BY
更改为RIGHT(TRANS_INPUTTER, 5)
。gblwokeq2#
您还可以按TRANS_INPUTTER和TRANS_TYPE进行分组。当这些值不同时,即使您没有在SELECT语句中指定它们,也会有这些值对应的行。
然而,由于我们没有测试数据的脚本,我现在无法重现您的问题。
ippsafx73#
zqry0prt4#
尝试输出
TRANS_TYPE
,或者将TRANS_TYPE LIKE '%Deposit%'
放在WHERE
子句中。我认为这些“extras”输出是其他TRANS_TYPE