2012-03-09 25 views
3

我有一個表,我運行一個查詢反對,並得到類似的結果:以查詢數據,以建立新的表

----------------------------------------------------------------------------------------------- 
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,但需要找到一個解決方案,以協助該原諒我的知識的缺乏。)

+1

通常,如果指定了哪個數據庫,唱。和它的版本。有很多方法來剝皮這隻貓! – 2012-03-09 19:17:19

+0

相關:[給定表數據的期望輸出](http://stackoverflow.com/questions/9408622/desired-output-with-given-table-data)。儘管Oracle-dpecific,解決這類問題的一種方法(交叉連接到虛擬表的方法)可能適用於大多數SQL產品。 – 2012-03-09 20:35:35

+0

rdms是SQL 2008 R2 – rspencer 2012-03-09 23:12:02

回答

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 

... 
+0

+1,因爲這適用於所有rdbms,但如果rdbms是oracle 11g,請使用Mickeal提及的解決方案。 – 2012-03-09 19:21:58

+0

如果所有數據都在一個表中,這將如何工作?聯合所有運算符不是用於連接來自多個表的數據嗎? – rspencer 2012-03-09 23:10:14

+0

@rspencer - 'UNION ALL'可以結合多個查詢的結果,不管這些查詢來自哪裏。是的,這是有效的。 – BradC 2012-03-10 17:25:36

1

您可以使用逆透視如果這在您使用的DBMS中受支持。

事情是這樣的:

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  
+0

我認爲這只是在oracle 11g中,必須搜索該人是否要求不同的rdbms,但肯定會給出+1以提供unpivot的概念。 – 2012-03-09 19:18:29

+1

@GauravSoni - 從2005年開始在SQL Server中工作。 – 2012-03-09 19:20:25

+0

:感謝您的信息,我知道 – 2012-03-09 19:39:00

0

我想逆轉置的上面的回答可能是最好的,如果你的數據庫支持,但...我有一種感覺你的原始查詢可以通過一個簡單的「group by」來完成此操作。

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

不可能山姆,你很疑惑查詢結果與表列 – 2012-03-09 19:28:26

+0

你只是假設他正在做「select *」從這個聚合表。我只是留下可能性打開,以防他在「查詢」中進行聚合...並且不,我不會將查詢結果與表列混淆。 =) – 2012-03-09 20:47:16

相關問題