2009-06-03 4 views
1

테이블에서 3 열을 선택해야하지만 모든 열의 각 값이이 열의 결과 집합에서 고유해야합니다.각 열에 고유 표백

이 쿼리 :

SELECT DISTINCT TOP 10 a, b, c 
FROM x 

10 별개의 세트를 반환합니다.

어떻게해야합니까?

+0

그것은 당신이 무엇을 의미하는지 이해하기 어렵다. 아마도 데이터의 예와 예상 결과의 예가 도움이 될 수 있습니까? – spender

답변

4
WITH q AS 
     (
     SELECT a, b, с, ROW_NUMBER() OVER (ORDER BY a, b, c) AS rn 
     FROM mytable 
     ) 
SELECT TOP 10 a, b, c 
FROM q q1 
WHERE NOT EXISTS 
     (
     SELECT 1 
     FROM q 
     WHERE q.rn < q1.rn 
       AND q.a = q1.a 
     ) 
     AND NOT EXISTS 
     (
     SELECT 1 
     FROM q 
     WHERE q.rn < q1.rn 
       AND q.b = q1.b 
     ) 
     AND NOT EXISTS 
     (
     SELECT 1 
     FROM q 
     WHERE q.rn < q1.rn 
       AND q.c = q1.c 
     ) 
+0

That 's beautiful tsql +1 – ichiban

+0

@ichiban : 감사합니다 :) 오늘 블로그에서 오늘의 게시물을 내 블로그에 남겨 둘 것입니다 – Quassnoi

+0

대담한 로터리 방식 선택 a, b, c x 그룹에서 a, b, c 또는 무엇으로 내가 그리워 했니? –

1

이것이 한 번에 가능할 지 모르겠습니다. 나는 테이블 변수를 만들어 이것을 할 것이다.

DECLARE @Results TABLE 
(
    a varchar(100), 
    b varchar(100), 
    c varchar(100) 
) 
INSERT @Results(a) 
SELECT DISTINCT a FROM myTable 

INSERT @Results(b) 
SELECT DISTINCT b FROM myTable 

INSERT @Results(c) 
SELECT DISTINCT c FROM myTable 

SELECT a,b,c FROM @Results 
관련 문제