2014-07-02 71 views
0

我想不出在Oracle SQL正确的查询 我有以下数据:的Oracle SQL查询一行每月只值,但需要组由它每月

Name Monthly_amount Start_date 
Bob  100    April 2014 
Mike 120    June 2014 
Steve 80    Sept 2014 
Bob  50    Dec 2014 

而且我想得到以下结果

Name |Jan-14| Feb-14| Mar-14| Apr-14 |May-14| Jun-14| Jul-14 |Aug-14|Sep-14|Oct-14| Nov-14| Dec-14 
Bob 0  0  0  100  100 100  100  100 100 100  100  150 
Mike 0  0  0  0  0  120  120  120 120 120  120  120 
Steve 0  0  0  0  0  0  0  0  80  80  80  80 
+0

被声明为'DATE'或'VARCHAR2'的'start_date'列? –

+0

您需要查看数据透视查询。 – OldProgrammer

+0

我对Oracle不熟悉,但是您是否尝试过下列文档:http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html – rhealitycheck

回答

1

沿着这条线应该适合你。如果你需要列定义是动态的,你将不得不动态创建它,但最好在你的应用程序中做这样的事情。

SELECT Name, 
    SUM(CASE WHEN Start_date <= TO_DATE('01-JAN-2014','DD-MON-YYYY') 
     THEN Monthly_Amount ELSE 0 END) AS Jan14, 
    SUM(CASE WHEN Start_date <= TO_DATE('01-FEB-2014','DD-MON-YYYY') 
     THEN Monthly_Amount ELSE 0 END) AS Feb14, 
(etc.) 
FROM table1 
GROUP BY Name; 

(假设Name唯一地定义一个人)

+0

认为它至少需要一个“总和”在十二月照顾鲍勃的额外50人? –

+0

哈哈可怜的鲍勃,你说的对 – wvdz

+0

谢谢,你的解决方案就像一个魅力。 有没有一种简单的方法可以将总和作为最后一行来总结所有月份? – Gerald