请教高手一个SQL问题:一个这样的表,表中数据如下: 客户号 证件类型 证件号码 30
客户号证件类型证件号码1000002085A345040400002420431000002085A345040400002420431000002085E6450325...
客户号 证件类型 证件号码
1000002085 A3 4504040000242043
1000002085 A3 4504040000242043
1000002085 E6 450325000000603
1000002085 A5 450325753736469
1000002085 E6 450325000000603
1000002085 A5 450325753736469
1000000250 A3 4504010000299681
1000000250 E8 69763808-9
要求按照证件类型:E6 E8 A3 A5 的优先级来取 证件类型 ,证件号码.意思就是目标表还是有这么多行,如果这个客户号有证件类型为E6的数据,那么所有这个客户的行的证件类型都变成E6,证件号变成E6的证件号,如果没有,则取E8,E8没有,则取A3,依此类推.
上面的数据经过查询得到的表样是:
客户号 证件类型 证件号码
1000002085 E6 450325000000603
1000002085 E6 450325000000603
1000002085 E6 450325000000603
1000002085 E6 450325000000603
1000002085 E6 450325000000603
1000002085 E6 450325000000603
1000000250 E8 69763808-9
1000000250 E8 69763808-9
请高手赐教,不胜感激!!
有谁知道哈,我只有这么多分,全给了.请大家帮忙哈. 展开
1000002085 A3 4504040000242043
1000002085 A3 4504040000242043
1000002085 E6 450325000000603
1000002085 A5 450325753736469
1000002085 E6 450325000000603
1000002085 A5 450325753736469
1000000250 A3 4504010000299681
1000000250 E8 69763808-9
要求按照证件类型:E6 E8 A3 A5 的优先级来取 证件类型 ,证件号码.意思就是目标表还是有这么多行,如果这个客户号有证件类型为E6的数据,那么所有这个客户的行的证件类型都变成E6,证件号变成E6的证件号,如果没有,则取E8,E8没有,则取A3,依此类推.
上面的数据经过查询得到的表样是:
客户号 证件类型 证件号码
1000002085 E6 450325000000603
1000002085 E6 450325000000603
1000002085 E6 450325000000603
1000002085 E6 450325000000603
1000002085 E6 450325000000603
1000002085 E6 450325000000603
1000000250 E8 69763808-9
1000000250 E8 69763808-9
请高手赐教,不胜感激!!
有谁知道哈,我只有这么多分,全给了.请大家帮忙哈. 展开
展开全部
你先告诉我,为什么结果要重复这么多行?
假设你的表为A表.假设有多少行重复多少行,脚本可以这样写
select
b.客户号,
b.证件类型,
b.证件号码
from a,
(
select 客户号, 证件类型,证件号码
, ROW_NUMBER() OVER (PARTITION BY 客户号 ORDER BY
case when 证件类型 = 'E6' then '01'
when 证件类型 = 'E8' then '02'
when 证件类型 = 'A3' then '03'
when 证件类型 = 'A5' then '04' else '05' end
ASC) aa
from a
)b
where a.客户号 = b.客户号 and b.aa = 1
假设你的表为A表.假设有多少行重复多少行,脚本可以这样写
select
b.客户号,
b.证件类型,
b.证件号码
from a,
(
select 客户号, 证件类型,证件号码
, ROW_NUMBER() OVER (PARTITION BY 客户号 ORDER BY
case when 证件类型 = 'E6' then '01'
when 证件类型 = 'E8' then '02'
when 证件类型 = 'A3' then '03'
when 证件类型 = 'A5' then '04' else '05' end
ASC) aa
from a
)b
where a.客户号 = b.客户号 and b.aa = 1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-07-05
展开全部
假设你的表为A表.假设有多少行重复多少行,脚本可以这样写
with t as (select * from (select 客户号, 证件类型,证件号码
, ROW_NUMBER() OVER (PARTITION BY 客户号 ORDER BY
case when 证件类型 = 'E6' then '01'
when 证件类型 = 'E8' then '02'
when 证件类型 = 'A3' then '03'
when 证件类型 = 'A5' then '04' else '05' end
ASC ) r ) a where a.r=1 )
select a.客户号,t.证件类型,t.证件号码 from a left join t on a.客户号=t.客户号
你的这个需求很奇怪,不过这个语句应该可以满足你的需求。希望成功后,能采纳我的答案。
with t as (select * from (select 客户号, 证件类型,证件号码
, ROW_NUMBER() OVER (PARTITION BY 客户号 ORDER BY
case when 证件类型 = 'E6' then '01'
when 证件类型 = 'E8' then '02'
when 证件类型 = 'A3' then '03'
when 证件类型 = 'A5' then '04' else '05' end
ASC ) r ) a where a.r=1 )
select a.客户号,t.证件类型,t.证件号码 from a left join t on a.客户号=t.客户号
你的这个需求很奇怪,不过这个语句应该可以满足你的需求。希望成功后,能采纳我的答案。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select C3.客户号,C4.证件类型,C4.证件号码
from Customer C3,(select distinct C1.客户号,C1.证件类型,C1.证件号码
from Customer C1,(select 客户号,min(case 证件类型
when 'E6' then 1
when 'E8' then 2
when 'A3' then 3
when 'A5' then 4
end) as 最优
from Customer
group by 客户号) C2
where C1.客户号=C2.客户号
and case 证件类型
when 'E6' then 1
when 'E8' then 2
when 'A3' then 3
when 'A5' then 4
end=C2.最优) C4
where C3.客户号=C4.客户号
from Customer C3,(select distinct C1.客户号,C1.证件类型,C1.证件号码
from Customer C1,(select 客户号,min(case 证件类型
when 'E6' then 1
when 'E8' then 2
when 'A3' then 3
when 'A5' then 4
end) as 最优
from Customer
group by 客户号) C2
where C1.客户号=C2.客户号
and case 证件类型
when 'E6' then 1
when 'E8' then 2
when 'A3' then 3
when 'A5' then 4
end=C2.最优) C4
where C3.客户号=C4.客户号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用 SQL 语句中的 Case When Then 语句 ,百度后 查询使用语法。就可以实现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没懂要解决什么问题?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询