一个行转列的应用

--> liangCK小梁 于2008-10-15

--> 生成测试数据: #T

 

IF OBJECT_ID('tempdb.dbo.#T') IS NOT NULL DROP TABLE #T

CREATE TABLE  #T (id INT,姓名 VARCHAR(4),类别 VARCHAR(1),单位 VARCHAR(6))

INSERT INTO #T

SELECT 1,'张三','A','单位一' UNION ALL

SELECT 2,'张三','B','单位三' UNION ALL

SELECT 3,'张三','C','单位一' UNION ALL

SELECT 4,'李四','A','单位二' UNION ALL

SELECT 5,'李四','C','单位二' UNION ALL

SELECT 6,'王五','c','单位三' UNION ALL

SELECT 7,'王五','B','单位四'

 

--SQL查询如下:

 

SELECT 姓名,

       ISNULL(单位,(SELECT TOP 1 单位

                    FROM #T

                    WHERE 姓名=t.姓名

                    ORDER BY id DESC)),

       A,B,C

FROM

(

  SELECT 姓名,

       MAX(CASE WHEN 类别='B' THEN 单位 END) 单位,

       MAX(CASE WHEN 类别='A' THEN '' ELSE '' END) A,

       MAX(CASE WHEN 类别='B' THEN '' ELSE '' END) B,

       MAX(CASE WHEN 类别='C' THEN '' ELSE '' END) C

  FROM #T

  GROUP BY 姓名

) AS t

 

/*

姓名          A    B    C

---- ------ ---- ---- ----

李四   单位二           

王五   单位四           

张三   单位三           

 

(3 行受影响)

*/

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值