列到维护用户标识的行

时间:2013-07-11 16:45:37

标签: sql sql-server unpivot

我的列看起来像这样:

UserID    col1    col2    col3    col4
---------------------------------------
233432    45.2    34.2    ''      0.52

我希望它看起来像这样:

UserID    colID    value
-------------------------
233432    col1     45.2
233432    col2     34.2
233432    col3     ''
233432    col4     0.52

我在下面找到了这个链接:

column to row in sql server?

但它并没有真正回答我的问题。我的问题。我正在使用Sql Server 2012。

2 个答案:

答案 0 :(得分:2)

由于您使用的是SQL Server 2008+,因此您可以使用CROSS APPLY和VALUES来解决数据:

select t.userid,
  c.colid,
  c.value
from yourtable t
cross apply
(
  values
  ('col1', col1),
  ('col2', col2),
  ('col3', col3),
  ('col4', col4)
) c (colid, value);

请参阅SQL Fiddle with Demo

答案 1 :(得分:1)

Select UserID,'col1',col1 as 'value' from mytable
union
Select UserID,'col2',col2 from mytable
union
Select UserID,'col3',col3 from mytable
union
Select UserID,'col4',col4 from mytable