2012-02-21 44 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