如下語句:我希望當w002,w003,w004分別在其等於1時才根據w001分組統計出各自的次數.
不知道是不是可以用一條語句完成。下面的sql應該怎麼修改...請各位指教 ..
select k1.w001,count(*),count(k2.w002),count(k2.w003),count(k2.w004),count(k2.w005),count(k2.w006) from k_b001 k1,k_b002 k2 where k1.id=k2.idand k2.w007='01' group by k1.w001

解决方案 »

  1.   

    當w002,w003,w004分別在其等於1時才根據w001分組統計出各自的次數.这句话不太好理解,最好把表的结构说一下,在举个例子说明一下要求~
      

  2.   

    SELECT k1.w001,COUNT(*),COUNT(CASE WHEN k2.w002='1' THEN k2.w002 END),COUNT(CASE WHEN k2.w003='1' THEN k2.w003 END),COUNT(CASE WHEN k2.w004='1' THEN k2.w004 END),COUNT(k2.w005),COUNT(k2.w006) FROM k1 INNER JOIN k2 ON k1.id=k2.id WHERE k2.w007='01' GROUP BY k1.w001 k_b001 k1,k_b002 k2 表名中可以有空格吗?这个我不知道~
      

  3.   

    SELECT k1.w001,
           COUNT(*),
           COUNT(CASE WHEN k2.w002='1' THEN k2.w002 END),
           COUNT(CASE WHEN k2.w003='1' THEN k2.w003 END),
           COUNT(CASE WHEN k2.w004='1' THEN k2.w004 END),
           COUNT(k2.w005),
           COUNT(k2.w006) 
        FROM k1 INNER JOIN k2 ON k1.id=k2.id 
        WHERE k2.w007='01' 
        GROUP BY k1.w001
      

  4.   

    謝謝magicbacon
    牛人就是牛人,正是我想要表達的.
      

  5.   

    应该用存储过程吧
    我大概写一下吧!
    if(k2.w002='1' || k2.w003='1' || k2.w004='1')
    SELECT k1.w001,
           COUNT(*),
           COUNT(k2.w002),
           COUNT(k2.w003),
           COUNT(k2.w004),
           COUNT(k2.w005),
           COUNT(k2.w006) 
        FROM k1 INNER JOIN k2 ON k1.id=k2.id 
        WHERE k2.w007='01' 
        GROUP BY k1.w001