2012-11-09 148 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表示分類。