对不起,如果我不清楚。这就是我所拥有的:
这就是我想要实现的目标:
基本上,我不想为每个项目设置一列,而是将所有项目放在一个名为 Code 的列下。这将爆炸我拥有的行数,因为每个项目都有 3 个或更多不同的比率(并且所有百分比也在比率列下)。我知道如何将行转换为列,反之亦然,但为此,我有点迷茫。任何帮助都将不胜感激。
对不起,如果我不清楚。这就是我所拥有的:
这就是我想要实现的目标:
基本上,我不想为每个项目设置一列,而是将所有项目放在一个名为 Code 的列下。这将爆炸我拥有的行数,因为每个项目都有 3 个或更多不同的比率(并且所有百分比也在比率列下)。我知道如何将行转换为列,反之亦然,但为此,我有点迷茫。任何帮助都将不胜感激。
假设您使用的是 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
现在,如果事先不知道代码的数量或者只是想动态执行,您可以使用动态 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)