2016-11-09 179 views
0

我得到一個錯誤與我的子查詢,並沒有看到我做錯了什麼。子查詢在它上面工作。那裏的問題顯然是什麼問題。也嘗試過EXISTS。SQL子查詢(Where In)

select [ID NUMBER], [PERNO], [TITLE], [INITIALS], [SURNAME], [DATE OF BIRTH] 
from dbo.[DATASEPT002] 
WHERE [ID NUMBER] IN 
(SELECT [ID NUMBER], COUNT([PERSALNO]) AS COUNTOF 
FROM [dbo].[DATASEPT] 
GROUP BY [ID NUMBER] HAVING COUNT([PERSALNO]) >1) 
+0

子查詢冗餘返回'COUNT([PERSALNO])'。 –

+0

我忘了補充。我也嘗試只從子查詢中選擇ID號碼,所以子查詢只是ID號碼,但還沒有能夠做到這一點。 Thx格式化。 – user4242750

+0

請包括您使用***實際查詢***與您遇到的***實際錯誤/問題***。如果您嘗試過兩次或更多的查詢,請提供***全部***,每個都帶有相關的錯誤/問題。 – MatBailie

回答

1

在子查詢中有兩列。只有一個可以被用於IN比較:

select [ID NUMBER], [PERNO], [TITLE], [INITIALS], [SURNAME], [DATE OF BIRTH] 
from dbo.[DATASEPT002] t 
WHERE [ID NUMBER] IN (SELECT [ID NUMBER] 
         FROM [dbo].[DATASEPT] 
         GROUP BY [ID NUMBER] 
         HAVING COUNT([PERSALNO]) > 1 
        ); 

然而,我會表達此更通常使用窗口函數:

select t.* 
from (select t.*, count(*) over (partition by persalno) as cnt 
     from DATASEPT002 t 
    ) t 
where cnt > 1; 
+0

Gordon有兩個不同的表格,所以你的第二個例子是不正確的 –

+0

第一個工作。謝謝 – user4242750

+0

@ user4242750 - 然後對您的OP的評論是誤導性的或不正確的。因爲你的查詢唯一的變化是這個'只從子查詢中選擇ID號碼',你說'但是還沒有做到這一點'。 – MatBailie