取一列并在一行上产生两个总和

时间:2011-11-01 20:54:35

标签: sql oracle

非常简化,我有一列数字和一列日期。我想生成一行,将基于一个日期的数字合并为一列,将另一个日期合并为另一列。

数据看起来像这样 -

date      number
201111    500
201111    500
201111    500
201109    500

我希望它看起来像这样 -

sum1    sum 2
1500      500

我正在使用的代码:

SELECT SUM(A1.COL1),SUM(A2.COL1)
FROM TAB1 A1,TAB1 A2
WHERE A1.DATE = '201111'
AND A2.DATE = '201109'

我得到的结果是 -

sum1    sum2
1000    1500

基本上,它并不是总和所有的sum1(应该是1500但是返回1000)并且它总和sum2太多(应该是500但是返回1500)。

2 个答案:

答案 0 :(得分:8)

你可能想要像

这样的东西
SELECT SUM( case when date = '201111' then col1 else null end ) sum1,
       SUM( case when date = '201109' then col1 else null end ) sum2
  FROM tab1
 WHERE date in ('201109', '201111')

当然,您应该考虑在DATE列而不是VARCHAR2列中存储日期。

答案 1 :(得分:2)

如果在11g中也可以使用PIVOT

 SELECT * 
 FROM (SELECT date, sum(number) number
    FROM Tab1 
    GROUP BY date)
     PIVOT ( sum(number)  FOR date IN ('201109', '201111') );