2
我正在使用Microsoft Sql Server 2008。 下面的查询会读取某些行,但可以从每个表中排列具有不同行的行。SQL Server 2008独特行分组
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
我正在使用Microsoft Sql Server 2008。 下面的查询会读取某些行,但可以从每个表中排列具有不同行的行。SQL Server 2008独特行分组
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
你需要排序ID1,ID2和ID3
编辑:更新,添加顺序栏
;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
编辑:完成查询确切的结果
;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
是啊,我已经试过了,但我已经得到了所需的输出,请参见第2列,我需要先排序不同的行 – DON 2012-01-05 15:33:52
我看到了问题。有没有什么能够识别id2中的前5个,使其与第二个5不同?如果不是,那么它们应该属于一起,但从图中可以看出,还有另外一个可以表示第一组和第二组的键 – Leons 2012-01-05 16:20:04
是的,来自id2的5是该表的PK,并且它与来自id1的1联合。 id1,c1 - table1,id2,c2 - table2,id3,c3 - table3。 table2和table3由来自table1的id1连接。希望你明白。 – DON 2012-01-05 16:28:41