如何在 sql server 2008r2 中将行名更改为列名

Posted

技术标签:

【中文标题】如何在 sql server 2008r2 中将行名更改为列名【英文标题】:How to change Row name into Column name in sql server 2008r2 【发布时间】:2018-10-22 09:40:54 【问题描述】:

我在 asp.net 中使用存储过程作为绑定制作 XtraCharts 线图(XY 图)时遇到了麻烦。

我想通过R250R500R1000R2000 行创建X 值 和Y值是上面每一行中已经存储的数据。

我有一个这样的原始表:

========================================================
No | Sequence No | ItemId | R250 | R500 | R1000 | R2000
========================================================
1    001           118       23     13     14      24

我想把它显示到

========================================================
No | Sequence No | ItemID | Value | NameX
========================================================
1    001            118      23     R250
1    001            118      13     R500
1    001            118      14     R1000
1    001            118      24     R2000

是否有任何可能的查询来实现这一目标?非常感谢。。

【问题讨论】:

【参考方案1】:

您可以使用apply 专门用于此:

select t.No, t.[Sequence No], t.ItemID, tt.*
from table t cross apply
     ( values ([R250], 'R250'),
              ([R500], 'R500'),
              ([R1000],'R1000'),
              ([R2000],'R2000')
     ) tt (Value, NameX);

【讨论】:

它非常适合我。谢谢兄弟的答案:)【参考方案2】:

您只需要简单的UNPIVOT (helpful article)。

试试下面的代码:

declare @tbl table (No int, SequenceNo varchar(3), ItemId int, R250 int, R500 int, R1000 int, R2000 int);
insert into @tbl values (1,'001', 118, 23, 13, 14, 24);

select * from (
    select * from @tbl
) p unpivot (
    [Value] for NameX in (R250, R500, R1000, R2000)
) as up;

【讨论】:

以上是关于如何在 sql server 2008r2 中将行名更改为列名的主要内容,如果未能解决你的问题,请参考以下文章

SQL server 2008R2中怎么直接修改表内数据

如何安装SQL server 2008R2

如何在 SQL Server 2008 中将行切换到列,反之亦然

如何在SQL Server 2008R2中查找未使用的列

如何在 SQL Server 中将纪元时间与 24 小时前进行比较?

如何在 SQL Server 或 C# 代码中将行转换为列