1

对不起,如果我不清楚。这就是我所拥有的:

表 A

这就是我想要实现的目标:

表 B

基本上,我不想为每个项目设置一列,而是将所有项目放在一个名为 Code 的列下。这将爆炸我拥有的行数,因为每个项目都有 3 个或更多不同的比率(并且所有百分比也在比率列下)。我知道如何将行转换为列,反之亦然,但为此,我有点迷茫。任何帮助都将不胜感激。

4

1 回答 1

0

假设您使用的是 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

于 2013-06-20T03:15:38.200 回答