注册 登录
编程论坛 SQL Server论坛

SQL如何查询

zif1819 发布于 2010-02-26 11:35, 483 次点击
有一张表:
姓名    合同签订日期    合同结束日期
张三     2007-7-1        2008-7-1
李四     2005-5-1        2007-5-1
王五     2006-7-1        2007-7-1
张三     2008-7-1        2009-7-1
李四     2008-5-1        2009-5-1
张三     2009-7-1        2010-7-1
李四     2010-5-1        2011-5-1
王五     2008-7-1        2010-7-1
如何用查询语句得到:
姓名 合同1签订 合同1结束  合同2签订  合同2结束   合同3签订   合同3结束
张三  2007-7-1  2008-7-1  2008-7-1   2009-7-1    2009-7-1    2010-7-1   
李四  2005-5-1  2007-5-1  2008-5-1   2009-5-1    2010-5-1    2011-5-1
王五  2006-7-1  2007-7-1  2008-7-1   2010-7-1

请高手指点!
1 回复
#2
cnfarer2010-02-26 14:28
不知道这样行不?我在表中添加一个字段用来记录各人的合同序号,然后再查询

create table xxx(name char(8),startd char(10),endd char(10),cx int)

insert into xxx values('a','2007-1-2','2007-2-3',1)
insert into xxx values('a','2008-1-2','2008-2-3',2)
insert into xxx values('a','2009-1-2','2009-2-3',3)
insert into xxx values('b','2007-2-2','2007-2-13',1)
insert into xxx values('b','2008-2-2','2008-3-31',2)
insert into xxx values('b','2009-3-2','2009-4-13',3)
insert into xxx values('c','2007-5-2','2008-5-31',1)
insert into xxx values('c','2009-4-2','2009-7-13',2)


select * from (select name 姓名,
    case when cx=1 then startd end as  合同1起始日,case when cx=1 then endd end as  合同1结束日,
    (select startd from xxx b where b.name=a.name and cx=2) as 合同2起始日,(select endd from xxx b where b.name=a.name and cx=2) as 合同2结束日,
    (select startd from xxx c where c.name=a.name and cx=3) as 合同3起始日,(select endd from xxx c where c.name=a.name and cx=3) as 合同3结束日
    from xxx a) x
where 合同1起始日 is not null
1