2012-02-21 46 views
0

所以我有一個表dpgift。我需要根據表格生成24個不同的「統計數據」(計數和總數與過濾器)。同一個表上的SQL多個連接

下面應該會生成前三列。

select a.lc as listCode, a.c, NVL(b.c,0), NVL(c.c,0) 
    FROM (select list_code as lc, count(donor) as c 
       FROM dpgift 
       group by list_code) a 
     LEFT JOIN (select list_code as lc, count(donor) as c 
         FROM dpgift 
         WHERE dpgift.rectype="P" 
         group by list_code) b 
     LEFT JOIN (select list_code as lc, count(donor) as c 
         FROM dpgift 
         WHERE dpgift.rectype="G" 
         group by list_code) c 
      ON b.lc = c.lc 
      ON a.lc = b.lc 

這幾乎可以工作,但我的連接有些問題。第三列(c.c)只有b.c不爲空的值。

有人可以告訴我什麼是錯?

順便說一句,我在VFP工作,但SQL似乎工作非常標準。

編輯:好的,這裏的輸出我得到

listcode c exp_3 Exp_4 
482  14 0  0 
483  2 0  0 
499  852 1  857 
.... 

它應該是:

listcode c exp_3 Exp_4 
482  14 0  14 
483  2 0  2 
499  852 1  857 
.... 
+0

它不起作用?你得到什麼輸出,你期望什麼? – JohnFx 2012-02-21 19:51:40

回答

4

這個版本應該產生你在找什麼。

SELECT list_code, 
     COUNT(donor), 
     SUM(CASE WHEN rectype = 'P' THEN 1 ELSE 0 END) AS Pcount, 
     SUM(CASE WHEN rectype = 'G' THEN 1 ELSE 0 END) AS Gcount 
    FROM dpgift 
    GROUP BY list_code 
+0

太棒了。我不得不使用vfp的'iif()'而不是'case when when vfp is fugly,but otherwise works it great,thanks。謝謝。 – slicedtoad 2012-02-21 20:28:08