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