2016-09-23 91 views
1

我有一個獨特的密鑰(用戶ID和類型)在CTE SQL查詢選擇遞歸

UserID | Type | Column1 | Column2 
---------------------------- 
1  | 1 | *NULL* | 1 
1  | 2 | ABC | *NULL* 
1  | 3 | *NULL* | 2 
2  | 1 | *NULL* | 1 
2  | 2 | CDE | *NULL* 
3  | 1 | *NULL* | 3 
3  | 2 | DTE | *NULL* 

我想建立一個查詢,搜索所有用戶ID的表包含:

(Type=1 AND Column2=1) AND (Type=3 AND Column2=2) 
+1

請編輯您的問題,並添加你正在尋找的結果。而且,你的問題與遞歸CTE無關。 –

+0

結果必須是UserID 1 – user6872781

+0

@Paparazzi。 。 。在我讀取數據時,UserId 1 *確實滿足條件。 –

回答

1

這個問題與遞歸CTE無關。你可以用聚集和having條款解決這個問題:

select userid 
from t 
where (Type = 1 AND Column2 = 1) OR (Type = 3 AND Column2 = 2) 
group by userid 
having count(distinct type) = 2; 
+0

@JibinBalachandran用戶標識2沒有Type = 3,所以不會被返回。 –

+0

@JibinBalachandran是的,多個記錄與'OR'滿足'WHERE'標準,但是隻有滿足兩者的記錄的用戶標識才符合'HAVING'標準。 –

+0

你能幫我解決與ROW_NUMBER()分頁 – user6872781

0
With CTE(userid) 
AS 
(
    SELECT userid 
    FROM t 
    WHERE (Type = 1 AND Column2 = 1) 
) 
SELECT userid 
FROM CTE 
WHERE EXISTS(
       SELECT 1 
       FROM CTE 
       WHERE Type = 3 AND Column2 = 2)