日期:2014-05-17 浏览次数:20430 次
select a.time,a.F1,b.F1 as F2 from (select * from table1 where F1<='d') a
left join (select * from table1 where F1>'d') b on a.time=b.time
----------------------------
-- Author :磊仔
-- Date :2013-03-01 22:33:07
-- Version:
-- Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (Intel X86)
-- Jun 28 2012 08:42:37
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7600: )
--
----------------------------
--> 测试数据:#TA
if object_id('tempdb.dbo.#TA') is not null drop table #TA
go
create table #TA([Time] int,[F1] varchar(1))
insert #TA
select 1,'a' union all
select 2,'b' union all
select 3,'c' union all
select 4,'d' union all
select 1,'e' union all
select 2,'f' union all
select 3,'g'
--------------开始查询--------------------------
;with cet as
(select *,ROW_NUMBER()over(partition by Time order by F1)rn
from #TA
)
select distinct a.Time,b.F1,c.F1 as F2
from #TA a
left join cet b on a.Time = b.Time and b.rn = 1
left join cet c on a.Time = c.Time and c.rn = 2
order by a.Time
----------------结果----------------------------
/*
Time F1 F2
----------- ---- ----
1 a e
2 b f
3 c g
4 d NULL
(4 行受影响)
*/