【问题标题】:Case statment based on a count基于计数的案例陈述
【发布时间】:2011-05-02 23:46:28
【问题描述】:

我想根据计数结果做一个案例陈述。

类似:

SELECT
    CASE
        WHEN count(distinct column) = 1
            THEN Foo
        WHEN count(distinct column) = 2
            THEN foo2
    END,
    column2
FROM
    TABLE

上面抛出的错误如:

Column 'column2' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

我尝试了其他一些类似的变体,但都无济于事。

使用 MS SQL 2005。

【问题讨论】:

  • 最好解释一下您实际尝试解决的问题...
  • 同时告诉我们您正在使用哪个 RDBMS。
  • @Mitch - 基本上,如果有多个值(例如“狗、猫、山羊、foo”),我需要选择“%term%”之类的列,我只需要否则为单个值。
  • 看来您将使用COUNT() 而没有GROUP BY,这意味着您将所有行收集(计数)为一个。因此, column2 无法真正显示。可以显示的是MAX(column2)COUNT(column2)SUM(column2) 或column2 上的其他聚合函数。
  • 你不能从错误信息中得到什么?它包含对您做错了什么的全面描述。

标签: sql sql-server-2005 count case


【解决方案1】:

您必须按列 2 分组:

SELECT
    CASE
        WHEN count(distinct column) = 1
            THEN Foo
        WHEN count(distinct column) = 2
            THEN foo2
    END,
    column2
FROM
    TABLE
GROUP BY Column2

【讨论】:

    【解决方案2】:

    昨天解决了这个问题。通过使用不同的别名在表中加入两次,并为每个使用不同的连接条件,我能够完成我需要的工作。这让我不必进行计数,因为我有专用表,只有正确的值。

    对不起,抽象代码,但结果类似于:

    SELECT
        CASE
            WHEN table1.field IS NOT NULL
                THEN table1alias1.column1
            WHEN table2.field IS NOT NULL
                THEN table1alias2.column1
        END,
        column2
    FROM
        TABLE0
        LEFT OUTER JOIN TABLE1 on TABLE0.id = TABLE1.field AND
            TABLE1.column1 LIKE '%foo%' as TABLE1ALIAS1
        LEFT OUTER JOIN TABL1 on TABLE0.id = TABLE1.field AND
            TABLE1.column1 LIKE '%fork%' as TABLE1ALIAS2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 2021-06-06
      • 2023-04-10
      • 2010-10-30
      • 2016-05-13
      • 2016-02-21
      • 1970-01-01
      相关资源
      最近更新 更多