2017-05-15 4 views
-1

원하는 출력을 얻기 위해 SQL 프레임 구성에 문제가 있습니다.아래의 요구 사항에 대한 SQL

표 X

Id_X | GroupId | SomeColumn 

표 R

Id_R | Id_X | GroupId | RColumn 

목적은 그룹 ID 값 (A는, B) 및 RColumn 값

r- 수치

있다가 그 테이블 R에서 Id_X를 선택하는 예 :

표 X

,
1 | A | SomeValue 
1 | B | SomeValue 
2 | A | SomeValue 
2 | B | SomeValue 
2 | B | SomeValue 
2 | C | SomeValue 

표 R은

101 | 1 | A | RValue 
102 | 2 | A | RValue 

는 SQL 내가 제대로 이해하고, 쿼리가해야 1

답변

0
SELECT 
    [X].Id_X 
FROM 
    [R] 
    INNER JOIN [X] ON 
     [R].Id_X = [X].Id_X 
     AND 
     [R].GroupId = [X].GroupId 
WHERE 
    [X].GroupId IN ('A', 'B') 
    AND 
    [R].RColumn = 'RValue' 
0

를 반환해야

DECLARE @TableX AS TABLE 
(
    Id_X int, GroupId varchar(10), SomeColumn varchar(20) 
) 

INSERT INTO @TableX 
VALUES 
(1, 'A', 'SomeValue'), 
(1, 'B', 'SomeValue'), 
(2, 'A', 'SomeValue'), 
(2, 'B', 'SomeValue'), 
(2, 'B', 'SomeValue'), 
(2, 'C', 'SomeValue') 

DECLARE @TableR AS TABLE 
(
    ID_R int, Id_X int, GroupId varchar(10),RColumn varchar(10) 
) 

INSERT INTO @TableR 
VALUES (101,1,'A','RValue'), (102,2,'A','RValue') 

SELECT DISTINCT tr.Id_X 
FROM  @TableR tr 
     INNER JOIN @TableX tx ON tx.Id_X = tr.Id_X AND tx.GroupId = tr.GroupId 
WHERE tr.RColumn = 'RValue' 
AND NOT EXISTS ( SELECT 1 FROM @TableX tx2 
        WHERE tx2.Id_X = tx.Id_X 
         AND tx2.GroupId NOT IN ('A','B') 
       ) 

데모 링크 : http://rextester.com/EGLOT75874

관련 문제