非常简化,我有一列数字和一列日期。我想生成一行,将基于一个日期的数字合并为一列,将另一个日期合并为另一列。
数据看起来像这样 -
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)。
答案 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') );