• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

疑难问题!!!

dairy1 2008-03-04 09:45:15
一个是人员表
infoid(主键,自增长),name,birthday,....

一个是证件表(一个人可能有0或多个证件记录)
infoid,idcardtype(证件类型:2护照,3港澳证....),idcardno(证件号)

想要得到
name,birthday,idcardtype1,idcardno1,idcardcardtype2,idcardno2

要求,一行中有两个证件类型与证件号,如果有护照,则护照为第一个证件号,其它任意选择一个证件号
如果没有护照,则任意选择两个

如何用一句SQL语句给出,不要用存储过程游标等
...全文
44 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
playwarcraft 2008-03-04
靈魂的當只有1個證件的時候,會重復到,
回复
csshan 2008-03-04
1 楼的没问题,
回复
playwarcraft 2008-03-04


create table 人员表 (infoid int identity(1,1),name varchar(50),birthday datetime)
insert into 人员表 select 'a',getdate()
insert into 人员表 select 'b',getdate()
insert into 人员表 select 'c',getdate()
insert into 人员表 select 'd',getdate()
insert into 人员表 select 'e',getdate()

create table 证件表 (infoid int,idcardtype int,idcardno varchar(50))
insert into 证件表 select 1,2,'a11'
insert into 证件表 select 1,3,'a22'
insert into 证件表 select 1,4,'a33'

insert into 证件表 select 2,2,'b11'
insert into 证件表 select 2,3,'b22'
insert into 证件表 select 2,4,'b33'

insert into 证件表 select 3,4,'c33'

insert into 证件表 select 4,3,'d22'
insert into 证件表 select 4,4,'d33'
insert into 证件表 select 4,5,'d33'

select t1.name,t1.birthday,idcardtype1,idcardno1,
idcardcardtype2=(select top 1 idcardtype from 证件表 where infoid=T1.infoid and idcardtype<>T2.idcardtype1 order by idcardtype),
idcardno2 =(select top 1 idcardno from 证件表 where infoid=T1.infoid and idcardtype<>T2.idcardtype1 order by idcardtype)

from 人员表 T1
inner join
(select infoid,name,birthday,
idcardtype1=(select top 1 idcardtype from 证件表 where infoid=A.infoid order by case when idcardtype=2 then 1 else 2 end,idcardtype),
idcardno1=(select top 1 idcardno from 证件表 where infoid=A.infoid order by case when idcardtype=2 then 1 else 2 end,idcardtype)
from 人员表 A) T2
on T1.infoid=T2.infoid

/*
a 2008-03-04 10:11:38.340 2 a11 3 a22
b 2008-03-04 10:11:38.340 2 b11 3 b22
c 2008-03-04 10:11:38.340 4 c33 NULL NULL
d 2008-03-04 10:11:38.340 3 d22 4 d33
e 2008-03-04 10:11:38.340 NULL NULL NULL NULL

*/

drop table 人员表,证件表

回复
playwarcraft 2008-03-04

--試下這個

select name,birthday,idcardtype1,idcardno1,
idcardcardtype2=(select top 1 idcardtype from 证件表 where infoid=T1.infoid and idcardtype<>T2.idcardtype1 order by idcardtype),
idcardno2 =(select top 1 idcardno from 证件表 where infoid=T1.infoid and idcardtype<>T2.idcardtype1 order by idcardtype)

from 人员表 T1
inner join
(select infoid,name,birthday,
idcardtype1=(select top 1 idcardtype from 证件表 where infoid=A.infoid order by case when idcardtype=2 then 1 else 2 end,idcardtype),
idcardno1=(select top 1 idcardno from 证件表 where infoid=A.infoid order by case when idcardtype=2 then 1 else 2 end,idcardtype)
from 人员表 A) T2
on T1.infoid=T2.infoid


回复
dairy1 2008-03-04
消息 156,级别 15,状态 1,第 4 行
Incorrect syntax near the keyword 'order'.
回复
pt1314917 2008-03-04

create table 人员表 (infoid int identity(1,1),name varchar(50),birthday datetime)
insert into 人员表 select 'a',getdate()
insert into 人员表 select 'b',getdate()
insert into 人员表 select 'c',getdate()
insert into 人员表 select 'd',getdate()

create table 证件表 (infoid int,idcardtype int,idcardno varchar(50))
insert into 证件表 select 1,2,'a11'
insert into 证件表 select 1,3,'a22'
insert into 证件表 select 1,4,'a33'
insert into 证件表 select 2,2,'b11'
insert into 证件表 select 2,3,'b22'
insert into 证件表 select 2,4,'b33'
insert into 证件表 select 3,2,'c11'
insert into 证件表 select 3,3,'c22'
insert into 证件表 select 3,4,'c33'
insert into 证件表 select 4,2,'d11'
insert into 证件表 select 4,3,'d22'
insert into 证件表 select 4,4,'d33'

select name,birthday,
(select top 1 idcardtype from 证件表 where infoid=a.infoid order by case idcardtype when 2 then 0 else 1 end)idcardtype1,
(select top 1 idcardno from 证件表 where infoid=a.infoid order by case idcardtype when 2 then 0 else 1 end)idcardno1,
(select top 1 idcardtype from 证件表 where infoid=a.infoid order by case idcardtype when 2 then 1 else 0 end)idcardtype2,
(select top 1 idcardtype from 证件表 where infoid=a.infoid order by case idcardtype when 2 then 1 else 0 end)idcardno2
from 人员表 a

回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-04 09:45
社区公告
暂无公告