1
對不起,如果我不清楚。這是我有:SQL:交叉表查詢將列名轉換爲行
這是我想達到的目標:
基本上,而不必爲每個項目一欄,我希望把所有的一列中的項目稱爲代碼。這將爆炸我擁有的行數,因爲每個項目有3個或更多不同的比率(並且所有百分比也都在比率列下)。我知道如何將行轉換爲列,反之亦然,但爲此,我有點迷路。任何幫助表示感謝。
對不起,如果我不清楚。這是我有:SQL:交叉表查詢將列名轉換爲行
這是我想達到的目標:
基本上,而不必爲每個項目一欄,我希望把所有的一列中的項目稱爲代碼。這將爆炸我擁有的行數,因爲每個項目有3個或更多不同的比率(並且所有百分比也都在比率列下)。我知道如何將行轉換爲列,反之亦然,但爲此,我有點迷路。任何幫助表示感謝。
假設你使用SQL服務器(在你的問題標籤是混亂的,因爲你有MySQL和SQL服務器),如果代碼的數量是有限的,並事先知道只使用UNPIVOT
SELECT Type, Code, Ratio
FROM
(
SELECT Type, HRE, HRF, HRM
FROM TableA
) s
UNPIVOT
(
Ratio FOR Code IN (HRE, HRF, HRM)
) u
這是現在SQLFiddle
如果代碼的數量沒有事先或者只是想知道動態做到這一點,你可以使用動態SQL
DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX)
SET @cols = STUFF(
(
SELECT DISTINCT ',' + QUOTENAME(name)
FROM sys.columns
WHERE object_id = object_id('TableA')
AND name LIKE 'H__'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @sql =
'SELECT Type, Code, Ratio
FROM
(
SELECT Type, ' + @cols +
' FROM TableA
) s
UNPIVOT
(
Ratio FOR Code IN (' + @cols + ')
) u'
EXECUTE(@sql)
這裏是SQLFiddle
@rustynails有沒有幫助?你的問題需要更多幫助嗎? – peterm
你是巨大的幫助。我不敢相信我沒有回覆。謝謝你,先生。 – rustynails