2016-06-13 2 views
-1

У меня есть таблицаSQL Server найти уникальные комбинации

rate_id service_id 
1  1 
1  2 
2  1 
2  3 
3  1 
3  2 
4  1 
4  2 
4  3 

Мне нужно найти и вставить в таблицу уникальные комбинации sevice_ids по rate_id ... но когда комбинация повторяется в другом rate_id я не хотите, чтобы вставить

в приведенном выше примере есть 3 комбинации 1,21,31,2,3

Как я могу запрашивают первую таблицу, чтобы получить уникальный ком ? Гиббс,

Thanx!

+0

Таким образом, результат будет сохранен как значения, разделенные запятой? И без ссылки на rate_id? –

+0

Как насчет значения '4' и почему он не появляется нигде в вашем ожидаемом выходе? –

+0

@TimBiegeleisen - это комбинация 'GROUP_CONCAT'' service_id' для каждого 'rate_id' – sagi

ответ

4

Попробуйте делать что-то вроде этого:

DECLARE @TempTable TABLE ([rate_id] INT, [service_id] INT) 

INSERT INTO @TempTable 
VALUES (1,1),(1,2),(2,1),(2,3),(3,1),(3,2),(4,1),(4,2),(4,3) 

SELECT DISTINCT 
    --[rate_id], --include if required 
    (
    SELECT 
     CAST(t2.[service_id] AS VARCHAR) + ' ' 
    FROM 
     @TempTable t2 
    WHERE 
     t1.[rate_id] = t2.[rate_id] 
    ORDER BY 
     t2.[rate_id] 
    FOR XML PATH ('') 
    ) AS 'Combinations' 
FROM 
    @TempTable t1 

Я поставил значения в табличную переменную только для удобства тестирования SELECT, запрос.

+0

excelent query, но он по-прежнему отображает комбинации более одного раза. – PanosPlat

+0

Извините @PanosPlat Я неправильно прочитал, я думал, что вам нужны разные значения для ID ставки. Я поправлю выше, чтобы удалить это поле из набора результатов. –

+0

@Paul Andrew, вы должны иметь 'ORDER BY' в подзапросе' FOR XML', иначе он не будет работать. Для проверки положите «(1,2)», как первое значение. В противном случае хороший ответ. – Alex

Смежные вопросы