一個行轉列的應用

liangck發表於2008-10-15

--> liangCK小樑 於2008-10-15<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

--> 生成測試資料: #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 行受影響)

*/

 

 

相關文章