Sql 联接表,一个表中的字段总和,按日期和另一个表的字段分开

Sql 联接表,一个表中的字段总和,按日期和另一个表的字段分开,sql,oracle,Sql,Oracle,我要把两张桌子合在一起。然后我在一个表中对两个不同日期段的两列进行求和 但是,我还希望将日期类别进一步分离为两组字段,这两组字段由其中一个表的不同字段上的WHERE条件定义 但是我无法得到这个结果,我得到了ORA-00936:缺少表达式 这很可能是一个语法错误,但是我还没有找到一个我正在尝试的多个日期和条件的示例,所以我找不到一个如何编写此示例的示例 我的代码: select SOME_CATEGORY_1, SOME_CATEGORY_2, WHERE (SOM

我要把两张桌子合在一起。然后我在一个表中对两个不同日期段的两列进行求和

但是,我还希望将日期类别进一步分离为两组字段,这两组字段由其中一个表的不同字段上的WHERE条件定义

但是我无法得到这个结果,我得到了ORA-00936:缺少表达式

这很可能是一个语法错误,但是我还没有找到一个我正在尝试的多个日期和条件的示例,所以我找不到一个如何编写此示例的示例

我的代码:

select SOME_CATEGORY_1, SOME_CATEGORY_2,
                WHERE (SOME_CATEGORY_3 = 'Value A', 
                sum(case when oc.week_start_date between SYSDATE-(52*7) and SYSDATE then ms.cash_sales else 0 end) A_TY_CashSales,
                sum(case when oc.week_start_date between SYSDATE-(52*7) and SYSDATE then ms.unit_sales else 0 end) A_TY_UnitSales,
                sum(case when oc.week_start_date between SYSDATE-(104*7) and SYSDATE-(53*7) then ms.cash_sales else 0 end) A_LY_CashSales,
                sum(case when oc.week_start_date between SYSDATE-(104*7) and SYSDATE-(53*7) then ms.unit_sales else 0 end) A_LY_UnitSales
                ),
                WHERE (SOME_CATEGORY_3 = 'Value B', 
                sum(case when oc.week_start_date between SYSDATE-(52*7) and SYSDATE then ms.cash_sales else 0 end) B_TY_CashSales,
                sum(case when oc.week_start_date between SYSDATE-(52*7) and SYSDATE then ms.unit_sales else 0 end) B_TY_UnitSales,
                sum(case when oc.week_start_date between SYSDATE-(104*7) and SYSDATE-(53*7) then ms.cash_sales else 0 end) B_LY_CashSales,
                sum(case when oc.week_start_date between SYSDATE-(104*7) and SYSDATE-(53*7) then ms.unit_sales else 0 end) B_LY_UnitSales
                )           
from MY_TABLE mt
join MY_OTHER_TABLE mot on mot.mykey = mt.mykey
join calendar_table ct on ct.week_id = ms.week_id
group by SOME_CATEGORY_1, SOME_CATEGORY_2
order by 1,2,3 desc
结果可以使用两个单独的选择来完成,但是如果可能的话,我希望有一个查询,在一个查询中显示这两个案例的今年和去年的总和

我怎样才能做到这一点


作为参考,此查询正在应用于Oracle数据库。

case
语句中添加另一个子句,以通过
某些类别3
进行限制,例如

select some_category_1
     , some_category_2
     , sum(case
             when     some_category_3 = 'value a'
                  and oc.week_start_date between sysdate-(52*7) and sysdate
               then ms.cash_sales
             else 0
           end) a_ty_cashsales
     , sum(case
             when     some_category_3 = 'value a'
                  and oc.week_start_date between sysdate-(52*7) and sysdate
               then ms.unit_sales
             else 0
           end) a_ty_unitsales
     , sum(case
             when     some_category_3 = 'value a'
                  and oc.week_start_date between sysdate-(104*7) and sysdate-(53*7)
               then ms.cash_sales
             else 0
           end) a_ly_cashsales
     , sum(case
             when     some_category_3 = 'value a'
                  and oc.week_start_date between sysdate-(104*7) and sysdate-(53*7)
               then ms.unit_sales
             else 0
           end) a_ly_unitsales
     , sum(case
             when     some_category_3 = 'value b'
                  and oc.week_start_date between sysdate-(52*7) and sysdate
               then ms.cash_sales
             else 0
           end) b_ty_cashsales
     , sum(case
             when     some_category_3 = 'value b'
                  and oc.week_start_date between sysdate-(52*7) and sysdate
               then ms.unit_sales
             else 0
           end) b_ty_unitsales
     , sum(case
             when     some_category_3 = 'value b'
                  and oc.week_start_date between sysdate-(104*7) and sysdate-(53*7)
               then ms.cash_sales
             else 0
           end) b_ly_cashsales
     , sum(case
             when     some_category_3 = 'value b'
                  and oc.week_start_date between sysdate-(104*7) and sysdate-(53*7)
               then ms.unit_sales
             else 0
           end) b_ly_unitsales
from my_table mt
     join my_other_table mot
       on mot.mykey = mt.mykey
     join calendar_table ct
       on ct.week_id = ms.week_id
group by some_category_1
       , some_category_2
order by some_category_1
       , some_category_2

您能否将create和insert语句作为测试用例的样本数据发布。在没有测试用例的情况下对逻辑进行反向工程需要花费大量的时间和精力:-(