一个行转列的应用

--> 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 行受影响)

*/

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liangCK/archive/2008/10/15/3081320.aspx

posted @ 2010-01-05 09:04  唔愛吃蘋果  阅读(195)  评论(0编辑  收藏  举报