我有下表:
code | value | req_date
以及以下查询:
select code, sum(value) sums, req_date from TABLE
group by code,req_date
通常编码" 0"和" 30"应该存在,无论如何我想这样做,如果不存在,以下默认记录
"0" | 0 | <date>
"30"| 0 | <date>
出现。可能的?
答案 0 :(得分:1)
如果您使用的是0和30的默认值,那么使用默认数据将表联合到其他行,然后对整批进行分组应该有效:
SELECT
code
,SUM(value) sums
,req_date
FROM
(
SELECT
code
,value
,req_date
FROM TABLE
UNION ALL
SELECT
'30' AS code
,0 AS value
,SYSDATE AS req_date --default date here
UNION ALL
SELECT
'0' AS code
,0 AS value
,SYSDATE AS req_date --default date here
) unionTable
GROUP BY code
,req_date
答案 1 :(得分:0)
通常对于此类问题,您可以从所有可能组合的列表开始,然后将其从此处连接到您的数据。
一般来说,这些问题分为两组,一组只需要在数据中出现的日期,另一组用于创建一个新表格,其中包含所有可能的日期。
我会假设你只能拥有你已经拥有的日期:
select
dc.code
, sum(value) sums
, dc.req_date
from
(select
*
from
(select distinct
code
from
TABLE) as codes --this gets lis to fpossible codes
CROSS JOIN --this creates all possible combinations of codes and dates
(select distinct
req_date
from
table
) as dates --this is all possible dates
) as dc
left outer join table as t
on dc.req_date = t.req_date
amd dc.code = t.code
group by
code
,req_date