【发布时间】:2023-01-24 18:51:47
【问题描述】:
我有以下查询:
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
返回以下结果:
|BusinessDate|BRANCH_CO_MNE|USER_ID|No of Cash Deposit|
+------------+-------------+-------+------------------+
|2023-01-23 |BNK |10938 |NULL |
|2023-01-23 |BNK |10938 |NULL |
|2023-01-23 |BNK |10938 |NULL |
|2023-01-23 |BNK |10938 |NULL |
|2023-01-23 |BNK |10938 |NULL |
|2023-01-23 |BNK |11748 |NULL |
|2023-01-23 |BNK |11748 |NULL |
|2023-01-23 |BNK |11748 |NULL |
|2023-01-23 |BNK |11748 |NULL |
|2023-01-23 |BNK |11748 |NULL |
|2023-01-23 |BNK |11748 |18 |
|2023-01-23 |BNK |11748 |NULL |
当我将 No of Cash Deposit 放入 GROUP BY 子句时,NULL 值重复出现。
结果不应该像
|BusinessDate|BRANCH_CO_MNE|USER_ID|No of Cash Deposit|
+------------+-------------+-------+------------------+
|2023-01-23 |BNK |10938 |NULL |
|2023-01-23 |BNK |11748 |18 |
|2023-01-23 |BNK |11748 |NULL |
【问题讨论】:
-
'No of Cash Deposit'是最后计算的列的名称。它不以任何其他身份用于查询。 -
分组依据只能应用于值。 NULL 是没有值,但表示没有值。你能提供一些你的表的样本数据和预期的结果吗?
-
这回答了你的问题了吗? How to group by a Calculated Field
-
GROUP BY也由TRANS_INPUTTER, TRANS_TYPE分组。我敢打赌,如果您将这些列添加到SELECT,您会看到这些行不重复 -
CASE里面的聚合有一种不正确的味道。我怀疑你应该包装COUNT大约CASE用于条件聚合。
标签: sql sql-server group-by