假设您使用的是 SQL Server(您的问题中的标签令人困惑,因为您同时拥有 mysql 和 sql-server)并且如果代码数量有限且事先已知,请使用 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