2013-03-14 41 views
0

我是SQL新手,一直呆在这段代码上几天。获取计数

select distinct Count(AGVGLST.AGVGLST_PIDM) "Count_AGVGLST_PIDM", 
     Count((select distinct pidm 
     from donor 
     where donor.pidm = agvglst_pidm 
     and donor.cfae_cat IN ('ALMB','ALMX'))) "Cfae" 
    from AGVGLST 
where AGVGLST.AGVGLST_DESG ='1125' 
     and AGVGLST.AGVGLST_FISC_CODE ='2010' 
     and not exists(select 'x' 
     from agvglst b 
     where b.agvglst_pidm = agvglst_pidm 
     and b.agvglst_desg <> '1125' 
     and b.agvglst_fisc_code = '2010') 

我试图让计数仅此desgination“1125”,所以我需要引用了两遍,由于某种原因,我得到零个计数,当我知道还有谁捐赠只是特定desgination捐助者。我相信这是我失踪的愚蠢。

+0

哪个rdbms好吗? SQL服务器? – Sebas 2013-03-14 13:06:43

+0

此外,你指望这些家伙,但谁也没有给任何其他指定任何东西比1125,所以也许这就是你的计数返回0的原因。它可能会清理一些样本数据。 – Sebas 2013-03-14 13:08:46

+0

sql server.That是对的,我只想计数那些给1125而不是其他任何东西。我确实有数据,我知道捐助者在给定的财政年度只给了1125。所以我知道0是不正确的。 – user2169875 2013-03-14 13:27:32

回答

0

如果您运行此查询,该怎么办?

SELECT 
    COUNT(a.AGVGLST_PIDM) "Count_AGVGLST_PIDM", 
FROM AGVGLST a 
WHERE 
    a.AGVGLST_DESG  = '1125' 
AND a.AGVGLST_FISC_CODE = '2010' 
AND NOT EXISTS(
      SELECT 'x' 
      FROM 
       agvglst b 
      WHERE b.agvglst_pidm = a.agvglst_pidm 
      AND b.agvglst_desg <> '1125' 
      AND b.agvglst_fisc_code = '2010' 
     ) 
+0

谢谢,这似乎工作通过给其他表一个别名。 – user2169875 2013-03-14 13:51:07

+0

等一下,我的意思是,我改变了你的查询,还有一部分丢失了。你不需要选择其他计数结果吗? – Sebas 2013-03-14 13:53:10

+0

我添加了其他部分,它的工作。非常感激 – user2169875 2013-03-14 14:04:55

1
not exists(select 'x' 
    from agvglst b 
    where b.agvglst_pidm = agvglst_pidm 
    and b.agvglst_desg <> '1125' 
    and b.agvglst_fisc_code = '2010') 

可能是这里产生了问题。可以有一个捐赠者,其名称不是'1125',但agvglst_fisc_code是'2010'。所以,由于记录的存在,您不存在限制'1125'的计数。

0

当应该是简单的事情开始变得太复杂了;它的时间来备份和重新开始:

select 
    AGVGLST_DESG, 
    coun(*) as "Count_AGVGLST_PIDM" 
from AGVGLST 
where AGVGLST_DESG = '1125' 
group by 
    AGVGLST_DESG 

任何额外的过滤器字段被添加到选择列表,并通过列表中的组,然后tothe where子句。