我怎么用sql語言實作上表到下表的轉換…
請大神指教,試了好多方法都失敗。
uj5u.com熱心網友回復:
用mssql寫的,理解思想--測驗資料
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([time] int,[fearture] nvarchar(21),[value] nvarchar(21))
Insert #T
select 1,N'A',N'我' union all
select 1,N'B',N'是' union all
select 1,N'C',N'董' union all
select 2,N'A',N'英' union all
select 2,N'B',N'杰' union all
select 2,N'C',N'。'
Go
--測驗資料結束
SELECT [time] ,
MAX(CASE [fearture]
WHEN 'A' THEN [value]
ELSE NULL
END) 語文 ,
MAX(CASE [fearture]
WHEN 'B' THEN [value]
ELSE NULL
END) 數學 ,
MAX(CASE [fearture]
WHEN 'C' THEN [value]
ELSE NULL
END) 英語
FROM #T
GROUP BY [time]
uj5u.com熱心網友回復:
這是一個行列轉換的操作行列轉換的三種方法
uj5u.com熱心網友回復:
已解決,謝謝
uj5u.com熱心網友回復:
如果特征這一行我有200個不同的值,我要寫200個MAX(CASE……END)陳述句嗎,請問有沒有簡單方法。?
uj5u.com熱心網友回復:
那就用動態陳述句拼接,借用#1版主的資料
--測驗資料
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([time] int,[fearture] nvarchar(21),[value] nvarchar(21))
Insert #T
select 1,N'A',N'我' union all
select 1,N'B',N'是' union all
select 1,N'C',N'董' union all
select 2,N'A',N'英' union all
select 2,N'B',N'杰' union all
select 2,N'D',N'。'
Go
--測驗資料結束
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL=ISNULL(@SQL+',','')+'['+fearture+']'
FROM (SELECT DISTINCT fearture FROM #T) AS A
SET @SQL='SELECT * FROM #T A
PIVOT (MAX(VALUE) FOR fearture IN ('+@SQL+')) AS B'
EXEC(@SQL)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/132133.html
標籤:疑難問題
下一篇:幫忙分析小問題,新手第一天上路
