【问题标题】:TSQL aggregation function in CASE/WHEN conditionCASE/WHEN 条件下的 SQL 聚合函数
【发布时间】:2018-04-21 08:21:36
【问题描述】:

我有这个问题:

SELECT 
    CASE 
        WHEN COUNT(DISTINCT Q.FIELD_1) > 1 AND MAX(Q.FIELD_1) <> 'N/A' THEN 'VALUE_010' ELSE 'VALUE_011' END AS FIELD_1,
    CASE
        WHEN COUNT(DISTINCT Q.FIELD_2) = 10 AND MAX(Q.FIELD_2) <> 'N/A' THEN 'VALUE_020' 
        WHEN COUNT(DISTINCT Q.FIELD_2) = 100 AND MAX(Q.FIELD_2) <> 'N/A' THEN 'VALUE_021'   
        ELSE 'VALUE_022' END AS FIELD_2
FROM (
    SELECT 
        A.FIELD_1,
        B.FIELD_2
    FROM TABLE_A a
    JOIN TABLE_B b
        ON a.FIELD_X = b.FIELD_Y
    GROUP BY
        A.FIELD_1,
        B.FIELD_2
) Q

我想要的是在选择的 CASE/WHEN 条件中使用 COUNT 或 MAX 等聚合函数。实际上我得到了错误:“>附近的语法不正确”。 有可能还是我应该尝试不同的方法?

【问题讨论】:

  • 为什么不在子查询中做count(distinct ...)?
  • 编辑问题并提供示例数据和所需结果。
  • @JNevill 因为我需要在 CASE/WHEN 条件下组合更多的聚合函数。我已经更新了我的问题。
  • 你能发布你得到的整个错误吗?查询看起来不错。

标签: sql-server tsql case aggregation case-when


【解决方案1】:

我认为这是因为您的代码中 FIELD_2 后面有一个逗号

ELSE 'VALUE_022' END AS FIELD_2,

【讨论】:

  • 谢谢,只是打错了
  • 您应该能够在 CASE 语句中使用 count 。我尝试了类似的代码,它可以工作。您提供的代码看起来不错。
【解决方案2】:

在您的查询中,ELSE 'VALUE_022' END AS FIELD_2, 中有一个尾随逗号

否则试试

SELECT 
    CASE 
        WHEN Q.F1 > 1 THEN 'VALUE_010' ELSE 'VALUE_011' END AS FIELD_1,
    CASE
        WHEN Q.F2 = 10 THEN 'VALUE_020' 
        WHEN Q.F2 = 100 THEN 'VALUE_021'   
        ELSE 'VALUE_022' END AS FIELD_2
FROM (
    SELECT 
        COUNT DISTINCT(A.FIELD_1) AS F1,
        COUNT DISTINCT(B.FIELD_2 AS F2
    FROM TABLE_A a
    JOIN TABLE_B b
        ON a.FIELD_X = b.FIELD_Y
    GROUP BY
        A.FIELD_1,
        B.FIELD_2
) Q

【讨论】:

  • 谢谢。我想知道 TSQL 语法是否允许直接在 CASE/WHEN 条件中组合聚合函数,例如 COUNT 和 MAX。我已经更新了我的问题。
【解决方案3】:

试试这个

SELECT 
    CASE WHEN COUNT(DISTINCT a.FIELD_1) > 1 THEN 'VALUE_010' ELSE 'VALUE_011' END AS FIELD_1
    ,CASE
        WHEN COUNT(DISTINCT b.FIELD_2) = 10 THEN 'VALUE_020' 
        WHEN COUNT(DISTINCT b.FIELD_2) = 100 THEN 'VALUE_021'   
        ELSE 'VALUE_022' END AS FIELD_2 
FROM  TABLE_A a
JOIN TABLE_B b
ON a.FIELD_X = b.FIELD_Y
GROUP BY A.FIELD_1, B.FIELD_2

【讨论】:

    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 2020-08-23
    • 2011-04-17
    • 2019-10-16
    • 2018-02-09
    • 2014-02-24
    • 1970-01-01
    • 2017-11-25
    相关资源
    最近更新 更多