2015-01-30 2 views
2

내가 4 열이 포함 된 데이터베이스 테이블이없는 열 값을 얻을 SQL - 빈
열 D있을 수 있습니다 -해야이 고유 한 값다른 열의 모든 값이 값

예를 :

A | B | C | D 
    ---|-----|------|-------  
    a1 | b1 | - | 101 
    a1 | - | c1 | 102 
    a1 | b2 | - | 103 
    a2 | - | - | 104 
    a2 | b3 | - | 105 
    a3 | b4 | c2 | 106 
    a3 | - | c3 | 107 
    a3 | - | c4 | 108 
,

내가 원하는 것은 열 A의 값과 열 B의 값을 얻는 것입니다. 열 A의 값은 열 C의 모든 레코드에 값이 없습니다. 나는 다음과 같은 결과을 얻으려면 예에서

:

더 A2 행은 C 값이 없기 때문에
A | B 
------------- 
a2 | 
a2 | b3 
+0

A가 null가 아니고, C는 – jarlh

+0

안녕 jarlh NULL입니다,하지만 난 모든 열 C에게 값을 싶지 A 열에서 같은 값이이 WHERE. –

+1

@juergend 나는 당신이 무엇을 더 명확하게 설명 하는지를 설명하면 당신이 대답을 매우 빨리 얻을 것이라고 믿는다. –

답변

3

죄송합니다, 당신은 모든 A2 값을 의미합니까?

select a, b 
from tablename t1 
where not exists (select 1 from tablename t2 
        where t1.a = t2.a 
        and c is not null) 
+0

안녕하세요 jarlh, 감사합니다. 네 이해가 정확하지만 단 하나의 테이블 만 있습니다. –

+0

@MapleLi 단 하나의 테이블이 사용됩니다 –

+0

@MapleLi, 예, 그것은 메인 쿼리와 서브 선택 모두에서 동일한 테이블입니다. – jarlh

0

시도해 볼 수 있습니까?

DECLARE @t TABLE 
    (
     A CHAR(2) , 
     B CHAR(2) , 
     C CHAR(2) , 
     D INT 
    ) 

INSERT INTO @t 
VALUES ('a1', 'b1', NULL, 101), 
     ('a1', NULL, 'c1', 102), 
     ('a1', 'b2', NULL, 103), 
     ('a2', NULL, NULL, 104), 
     ('a2', 'b3', NULL, 105), 
     ('a3', 'b4', 'c2', 106), 
     ('a3', NULL, 'c3', 107), 
     ('a3', NULL, 'c4', 108); 
WITH cte 
      AS (SELECT t1.* , 
         RANK() OVER (PARTITION BY t1.A ORDER BY t1.C) AS R 
       FROM  @t t1 
         JOIN @t t2 ON t2.A = t1.A 
      ) 
    SELECT t.A , 
      t.B 
    FROM cte 
      JOIN @t t ON t.A = cte.A 
    GROUP BY t.A , 
      t.B 
    HAVING COUNT(DISTINCT (R)) = 1 

출력 :

A B 
a2 NULL 
a2 b3 
+0

안녕 Giorgi Nakeuri, 굉장해! 정답을 얻습니다. 하지만 수천 개의 레코드가있는 기존 테이블에서 어떻게 동일한 작업을 수행 할 수 있습니까? 고맙습니다! –

관련 문제