2011-05-02 84 views
0

我想根据计数结果做案例陈述。基于计数的案例陈述

喜欢的东西:上面

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

+0

它可能是更好的解释你实际上是试图解决问题...... – 2011-05-02 23:56:11

+0

还告诉我们您所使用的RDBMS。 – 2011-05-02 23:59:49

+0

@Mitch - 基本上,如果有多个值(例如“dog,cat,goat,foo”),我需要选择'%term%'这样的列,否则我只需要单个值。 – mlissner 2011-05-03 00:01:15

回答

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 
1

你必须GROUP BY列2:

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