获取查询数据以构建新表

时间:2012-03-09 18:19:03

标签: sql sql-server-2008 view

我有一个表格,我对其进行查询并得到如下结果:

-----------------------------------------------------------------------------------------------
Account January February March April May June July August September October November December
-----------------------------------------------------------------------------------------------
1234      0        50     100    0    0    0   120   280    800        0      650      124
-----------------------------------------------------------------------------------------------

如何转换此查询以显示如下数据:

------------------------
Account    Period  Amount
-------------------------
1234        Jan      0
1234        Feb      50
1234        Mar      100
.
.
1234        Dec      124
--------------------------

我会创建一个视图,存储过程或其他东西吗? (原谅我缺乏知识,因为我不是真正的DBA,但需要找到一个解决方案来帮助解决这个问题。)

3 个答案:

答案 0 :(得分:1)

您可以使用以下查询显示它:

SELECT Account, 'Jan' as Period, January as Amount
FROM myTable

UNION ALL

SELECT Account, 'Feb' as Period, February as Amount
FROM myTable

UNION ALL

...

答案 1 :(得分:1)

如果您使用的DBMS支持,则可以使用unpivot。

这样的事情:

select U.Account, 
       U.Period,
       U.Amount
from 
  ( -- Your query goes here
    select 
      1234 as Account,
      0 as Januar,
      50 as February,
      100 as March
  ) as T
unpivot
  (
    Amount for Period in (Januar, February, March)
  ) as U

结果:

Account     Period     Amount
----------- ---------- -----------
1234        Januar     0
1234        February   50
1234        March      100      

答案 2 :(得分:0)

我认为如果您的数据库支持它,那么上面的unpivot答案可能是最好的...但我感觉您的原始查询可以通过一个简单的“分组依据”进行修改

select ..
from <table>
where Account = '1234'
group by Account, Period