2012-01-05 3 views
2

Я использую Microsoft Sql Server 2008. с этим ниже запросом берутся определенные строки, но можно упорядочить строки с отдельными строками, упорядоченными из каждой таблицы.SQL Server 2008 Distinct Rows Grouping

select id1,c1,id2,c2,id3,c3 
from t1 
left join t2 on t2.fk = t1.pk 
left join t3 on t3.fk = t1.pk 
order by id3 

enter image description here

ответ

2

Вам нужно сортировать по ID1, ID2 и id3

EDIT: обновление с полем дополнительной секвенирования

;WITH data AS 
(
    select id1,c1,id2,c2,id3,c3, 
      ROW_NUMBER() OVER (PARTITION BY id1, id2 ORDER BY id2) as id2seq, 
      ROW_NUMBER() OVER (PARTITION BY id1, id2, id3 ORDER BY id3) as id3seq  
    from t1 
    left join t2 on t2.fk = t1.pk 
    left join t3 on t3.fk = t1.pk 
) 
select id1, c1, id2, c2, id3, c3 
from data 
order by id1, id2seq, id3seq 

EDIT: Завершен запрос для точных результатов

;with data as( 
    select pid 
     , pname 
     , cid 
     , cname 
    from #t1 t1 
    left join #t2 t2 on t2.fk_pid = t1.pid 
), cte AS 
( 
    select pid 
      , eid 
      , ename 
    from #t1 t1 
     left join #t3 t3 on t3.fk_pid = t1.pid 
), combine AS 
(
    select d.pid 
     , pname 
     , cid 
     , cname 
     , ROW_NUMBER() over(partition by d.pid, cid order by cid) as seq 
     , eid 
     , ename 
     from data d join cte c on d.pid = c.pid 
) 
select pid, pname, cid, cname, eid, ename 
from combine 
order by pid, seq, cid 
+0

Да, я тоже пробовал tat, но я получаю нужный вывод, см. Столбец2, мне нужно заказать отдельные строки в начале – DON

+0

Я вижу проблему. Не есть ли что-то, что идентифицирует первые 5 из id2, чтобы сделать его отличным от второго? Если нет, то они должны принадлежать друг другу, но с вашей иллюстрации может показаться, что есть еще один ключ, который может указывать первую и вторую группу. – Leons

+0

да, 5 из id2 - это PK этой таблицы, и он соединен с 1 из id1. id1, c1 - таблица1, id2, c2 - таблица2, id3, c3 - таблица3. table2 и table3 объединяются id1 из таблицы1. Надеюсь, ты понял. – DON