0

我的 SQL Server 数据库中有一个预算表,如下所示:

create table #cols (
   acctid int, 
   yr int, 
   pd01 numeric(15,2), 
   pd02 numeric(15,2), 
   pd03 numeric(15,2), 
          .
          .
          .
   pd13 numeric(15,2),
   primary key(acctid, yr));

我需要获取各个列中的数据并将其切换为基于行的格式表,如下所示:

create table #rows (
  acctid int, 
  yr int, 
  pd int, 
  amt numeric(15,2), 
  primary key(acctid, yr, pd));

现在我可以像这样运行 13 条 SQL 语句:

insert into #rows select acctid, yr, 1, pd01 from #cols;
    .
    .
    .
insert into #rows select acctid, yr, 13, pd13 from #cols;

但我想知道是否有更有效/更优雅的方式来做到这一点?

4

2 回答 2

1

另一个选择是UNPIVOT

select acctid,yr,CAST(RIGHT(pd,2) AS INT) as pd, amt
from #cols
UNPIVOT
(amt FOR pd IN ([pd01],[pd02],[pd03],..., [pd13])) unp
于 2013-04-25T15:19:48.473 回答
0

你可以使用联合所有

insert into #rows
select acctid, yr, 1, pd01 from #cols;
union all
select acctid, yr, 2, pd02 from #cols;
union all
.....
union all
select acctid, yr, 13, pd13 from #cols;
于 2013-04-25T15:00:50.567 回答