【问题标题】:Why is GROUP BY not working in SQL Server?为什么 GROUP BY 在 SQL Server 中不起作用?
【发布时间】: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


【解决方案1】:

您还在 TRANS_INPUTTER 和 TRANS_TYPE 上分组。当这些值不同时,即使您没有在 SELECT 语句中指定它们,您也会有这些值的行。

但是,由于我们没有测试数据的脚本,所以我暂时无法重现您的问题。

【讨论】:

    【解决方案2】:

    尝试输出 TRANS_TYPE,或将 TRANS_TYPE LIKE '%Deposit%' 放在 WHERE 子句中。我认为这些“额外”输出是其他 TRANS_TYPE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-09
      • 2017-12-23
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      相关资源
      最近更新 更多