疑难问题!!!

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

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

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

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

如何用一句SQL语句给出,不要用存储过程游标等
...全文
66 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧