一个行转列的应用
--> 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