2012-11-09 111 views
0

我有以下SQL语句:使用COUNT()在WHERE子句

SELECT  C.LINKED_TABLE_ID AS CLIENT_DIWOR, I.STATUS AS AML_STATUS, dbo.CLIENT_MASTER.CLIENTCODE 
FROM   AML_INFORMATION AS I INNER JOIN 
       dbo.COMM_ENTRY AS C ON C.NAME_ID = I.CONTACT_ID AND C.TABLE_ID = 'C' AND C.PRIMARY_FLAG = 'Y' INNER JOIN 
       dbo.CLIENT_MASTER ON C.LINKED_TABLE_ID = dbo.CLIENT_MASTER.DIWOR 
WHERE I.CONTACT_ID = 234 
    AND I.[STATUS] = 'CC' 
    AND (CLIENT_MASTER.DIWOR = I.CONTACT_ID) 
    AND (CLIENT_MASTER.POSTING_STATUS <> '') 
    AND ((SELECT COUNT(CONTACT_ID) FROM AML_ID_DOCUMENT GROUP BY CONTACT_ID HAVING CONTACT_ID = 234) >1) 

如果我运行这个它返回0的记录,但是如果我删除最后一个AND语句AND ((SELECT COUNT(CONTACT_ID) FROM AML_ID_DOCUMENT GROUP BY CONTACT_ID HAVING CONTACT_ID = 234) >1)返回我期望的记录。

是否有可能以这种方式使用COUNT()?顺便说一句,在这个例子中的COUNT()返回2条记录,如果我将它包含在SELECT语句中,我也会返回0条记录。

任何人都可以指向正确的方向吗?

在此先感谢。

+3

不应该你的查询haver一个FROM子句的地方? –

+0

您是否在寻找联系人的存在,或者您是否在寻找联系人的存在位置,并且多次使用此联系人。 – TEEKAY

+0

重新添加FROM子句,在复制和粘贴期间以某种方式错过了 – Danny

回答

6

你显示脚本应该不会返回任何东西...... 您有一部分可以看看这样

and (Select Count(*) from AML_ID_DOCUMENT where CONTACT_ID =I.CONTACT_ID)>1 

虽然IST应该工作因为它...

+0

我想从AML_INFORMATION返回记录,AML_ID_DOCUMENT中至少有2条记录(对于给定的联系人)。 – Danny

+0

我不确定你在这个脚本中修改了什么(不能回想起原来的),但它似乎已经做到了。非常感谢你。 – Danny

4

不应该的最后一部分是这样的:

AND EXISTS (SELECT CONTACT_ID FROM AML_ID_DOCUMENT 
     WHERE CONTACT_ID = 234 
     GROUP BY CONTACT_ID 
     HAVING COUNT(CONTACT_ID)>1) 
+0

它的计算结果为true,并在隔离运行时返回CONTACT_ID,但在形成其中一部分时不起作用条款。 – Danny

0

试试此问题:

select count(portfolio_id) as porfolioCount 
from engineering_module_tracker_v2 
where r0_approval__category='Cat I' & 'Cat II'; 

Cat表示分类。