2016-09-23 112 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)