2009-06-03 3 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

Вот некоторые красивые tsql +1 – ichiban

+0

@ichiban: thanks :) Я собираюсь сделать сегодняшнее сообщение в своем блоге из него – Quassnoi

+0

Мощный окольный способ сказать Выберите a, b, c Из x Group По 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