日期:2014-05-17  浏览次数:20456 次

【提问】行转列问题,再次整理
http://bbs.csdn.net/topics/390670237

人员拥有卡片表:B
 人员Id     卡片号码     最后修改时间
 1          01235     2013-12-12
 1          0123456   2013-12-13  
 1          01234567  2013-12-12   
 2          02345     2013-12-12 
 2          023456    2013-12-12  
 .................................
 

需要以下结果:
 人员Id    卡片1           卡片2           卡片3           卡片4   卡片5 
 1         0000001235    0000123456    0001234567       null    null  
 2         0000002345    0000023456    null             null    null  
 ..................................................................         
 
说明:1、卡片号码唯一
       2、行转列后的卡片1、卡片2...数据长度为10位。
       3、行转列之后的列数(卡片1、卡片2...)固定为5个,如上面的结果表,超过5个的话从中取5条,
       可以根据列最后修改时间来过滤,过滤掉后面新加的卡号。

------解决方案--------------------
你改参数就可以了@id是保留多少行,这里是5,@date是删选时间
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-12-16 14:44:05
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[B]
if object_id('[B]') is not null drop table [B]
go 
create table [B]([人员Id] int,[卡片号码] varchar(8),[最后修改时间] datetime)
insert [B]
select 1,'012