基于计数的案例陈述

时间:2011-05-02 23:46:29

标签: sql sql-server-2005 count case

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

类似的东西:

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。

2 个答案:

答案 0 :(得分:1)

你必须GROUP BY column2:

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

答案 1 :(得分:0)

昨天解决了这个问题。通过使用不同的别名加入表格两次,并为每个别名使用不同的连接条件,我能够完成我所需要的。这让我可以避免需要进行计数,因为我有一些只有正确值的特殊用途表。

很抱歉抽象代码,但结果类似于:

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