现在有 一张表 table_a
字段 a 为主键 
字段 b 为外键  (table_b 的主键 其中 a到b 对多对1的关系) 
还有字段c那么 select count(distinct b) from table_a where c=1; 
这样的一句SQL 怎么用一个CASE 体现出来。。
因为考虑到这样的CASE 有很多(报表嘛) 所以 各种条件什么的都不应该在where 和group by等等 中设置
哎 。。烦躁啊。。苦思两日而不得
厚颜求助。

解决方案 »

  1.   


    select (case  when c=1 then count(distinct b) end ) number
    from table_a;c不定的话可以把where后面的c作为一个参数嘛..
      

  2.   

    这个 number 是个函数么没见过呢。。能为小弟讲解下么
      

  3.   

    select (case c when 1 then count(distinct b) end ) number
    from table_a;
    这样为什么不行呢
      

  4.   

    case有两种写法 一种是判断写法一种是基本写法...
    简单case函数..
    CASE判断语句,如果成立,那么执行1,否则执行2;有点类似三目运算符。
    select type,
    sum(case vender when 'A' then pcs else 0 end),
    sum(case vender when 'C' then pcs else 0 end),
    sum(case vender when 'B' then pcs else 0 end) 
    FROM tablename group by type
    ----CASE搜索函数
    SELECT S#,(CASE WHEN GRADE IS NULL THEN '缺考'
                    WHEN GRADE>85 THEN '优'
                    WHEN GRADE BETWEEN 75 AND 84 THEN '良'
                    WHEN GRADE BETWEEN 60 AND 74 THEN '及格'
                    WHEN GRADE<60 THEN '不及格'
                    END ) 分数
    FROM SC
    两种写法的返回结果是相同的,但是第一种的局限性会比较大,比如有些时候做判断的时候,以上是我整理的.
      

  5.   


    还是有问题啊说 b 没有包含在聚合函数或者group by 中。怎么办啊怎么办