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

1 sql oracle

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

数据看起来像这样 -

date      number
201111    500
201111    500
201111    500
201109    500
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样 -

sum1    sum 2
1500      500
Run Code Online (Sandbox Code Playgroud)

我正在使用的代码:

SELECT SUM(A1.COL1),SUM(A2.COL1)
FROM TAB1 A1,TAB1 A2
WHERE A1.DATE = '201111'
AND A2.DATE = '201109'
Run Code Online (Sandbox Code Playgroud)

我得到的结果是 -

sum1    sum2
1000    1500
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*ave 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')
Run Code Online (Sandbox Code Playgroud)

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