有个sql语句问题

nicebee 2009-03-12 03:31:50
有一张表,结构数据如下:

客户号,信用卡类型,发卡银行, 卡号, 有效期
001 visa pufa 123456 2010-1-1
001 VISA zhaoshang 2568 2011-1-1
001 master gongshang 55885 2011-1-1
...
002 同上。。。

这张表的内容是竖的,我想有没有最简便的SQL语句,能够横着显示,并且每个客户号最多限制有8个卡。如
001, visa, pufa ,123456,2010-1-1, visa, zhaoshang, 2568, 2011-1-1, master, gongshang, 55885, 2011-1-1, ......
002,......
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nicebee 的回复:]
请问count(1)是什么意思?
[/Quote]
记数,和count(*)差不多一个意思.
nicebee 2009-03-12
  • 打赏
  • 举报
回复
请问count(1)是什么意思?
贾桂权 2009-03-12
  • 打赏
  • 举报
回复
DECLARE @t TABLE(客户号 varchar(10), 信用卡类型 varchar(10),发卡银行 varchar(20),卡号 bigint,有效期 datetime) 
INSERT @t
SELECT '001', 'visa','pufa',123456,'2010-01-01' UNION ALL
SELECT '001', 'visa','zhaohang',23456,'2011-01-01' UNION ALL
SELECT '001', 'master','gongshang',12456,'2011-01-01' UNION ALL

SELECT '002', 'visa','pufa',1233456,'2010-01-01' UNION ALL
SELECT '002', 'visa','zhaohang',234456,'2011-01-01' UNION ALL
SELECT '002', 'master','gongshang',152456,'2011-01-01' UNION ALL
SELECT '002', 'visa','pufa',1236456,'2010-01-01' UNION ALL
SELECT '002', 'visa','zhaohang',234756,'2011-01-01' UNION ALL
SELECT '002', 'master','gongshang',128456,'2011-01-01' UNION ALL
SELECT '002', 'visa','pufa',1234956,'2010-01-01' UNION ALL
SELECT '002', 'visa','zhaohang',230456,'2011-01-01' UNION ALL
SELECT '002', 'master','gongshang',121456,'2011-01-01'



SELECT * FROM (SELECT DISTINCT 客户号 FROM @t) A
OUTER APPLY
(SELECT 卡信息= STUFF(REPLACE(REPLACE(
(SELECT top 8 信用卡类型+','+发卡银行+','+cast(卡号 as varchar(20))+','+convert(varchar(10),有效期,120) 卡信息
FROM @t N WHERE 客户号 = A.客户号 FOR XML AUTO),
'<N 卡信息="', ','), '"/>', ''), 1, 1, ''))N
/*
客户号 卡信息
---------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
001 visa,pufa,123456,2010-01-01,visa,zhaohang,23456,2011-01-01,master,gongshang,12456,2011-01-01
002 visa,pufa,1233456,2010-01-01,visa,zhaohang,234456,2011-01-01,master,gongshang,152456,2011-01-01,visa,pufa,1236456,2010-01-01,visa,zhaohang,234756,2011-01-01,master,gongshang,128456,2011-01-01,visa,pufa,1234956,2010-01-01,visa,zhaohang,230456,2011-01-01
*/
dawugui 2009-03-12
  • 打赏
  • 举报
回复
自己把3到7补完.
dawugui 2009-03-12
  • 打赏
  • 举报
回复
select 客户号,
max(case px when 1 then 信用卡类型 end) [信用卡类型1],
max(case px when 1 then 发卡银行 end) [发卡银行1],
max(case px when 1 then 卡号 end) [卡号1],
max(case px when 1 then 有效期 end) [有效期1],
max(case px when 2 then 信用卡类型 end) [信用卡类型2],
max(case px when 2 then 发卡银行 end) [发卡银行2],
max(case px when 2 then 卡号 end) [卡号2],
max(case px when 2 then 有效期 end) [有效期2],
...
max(case px when 8 then 信用卡类型 end) [信用卡类型8],
max(case px when 8 then 发卡银行 end) [发卡银行8],
max(case px when 8 then 卡号 end) [卡号8],
max(case px when 8 then 有效期 end) [有效期8]
from
(
select * , px = (select count(1) from tb where 客户号 = t.客户号 and 卡号 < t.卡号) + 1 from tb t
--或者
--select * , px = (select count(1) from tb where 客户号 = t.客户号 and 卡号 > t.卡号) + 1 from tb t
) m
group by 客户号

34,873

社区成员

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

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