案例

2014-01-18 51 views
0

我有植物,材料,移动类型和日期。案例

我的要求是我想要的MAX在材料和植物相结合,与运动型条件

首先,我需要在材料和植物的组合,其中运动型是602,如果602为null,则601 MAX日期,如果601为空,则为102,如果102为空,则101如果101也为空,则为其他运动类型。

为此,我使用下面的代码在IDT派生表,但我不能得到正确的结果:

SELECT 
DISTINCT 
    Table__1."0PLANT", 
    Table__1."0MATERIAL", 
    Max(Table__1."0PSTNG_DATE") as Last_Sales_Date 
FROM 
    "NM1"."PUBLIC"."IZDSO_DMR" Table__1 
    Where 
     CASE 
     WHEN (Table__1."0MOVETYPE"=602) THEN (Table__1."0MOVETYPE"=602) 
     WHEN (Table__1."0MOVETYPE"=602) IS NULL THEN (Table__1."0MOVETYPE"=601) 
     ELSE 
     (Table__1."0MOVETYPE"=601) END 
    Group By 
    Table__1."0MATERIAL", 
    Table__1."0PLANT" 

我想只为602,601种机芯类型仅

请帮我要得到正确的结果

+1

欢迎来到Stack Overflow。要格式化代码块,您不需要添加换行符。突出显示代码块,然后单击编辑器中的“{}”工具栏按钮或“ctl-k”。这样做会添加一个前面的换行符并将每行4个空格缩进为代码。如果适当标记,这也会强制语法突出显示。 –

+0

在MAX函数中移动CASE。 – Mihai

回答

0

这是您的where条款:

Where (CASE WHEN (Table__1."0MOVETYPE"=602) THEN (Table__1."0MOVETYPE"=602) 
      WHEN (Table__1."0MOVETYPE"=602) IS NULL THEN (Table__1."0MOVETYPE"=601) 
      ELSE (Table__1."0MOVETYPE"=601) 
     END) 

这实际上可以与一些SQL引擎一起工作,因为比较会变成数字。但是,我不认为这是你想要的。您正在根据0MoveType列设置优先级max()的值。

SELECT "0PLANT", "0MATERIAL", 
     (case when sum(case when "0MOVETYPE" = 602 then 1 else 0 end) > 0 
      then max(case when "0MOVETYPE" = 602 then "0PSTNG_DATE" end) 
      when sum(case when "0MOVETYPE" = 601 then 1 else 0 end) > 0 
      then max(case when "0MOVETYPE" = 601 then "0PSTNG_DATE" end) 
      when sum(case when "0MOVETYPE" = 102 then 1 else 0 end) > 0 
      then max(case when "0MOVETYPE" = 102 then "0PSTNG_DATE" end) 
      when sum(case when "0MOVETYPE" = 101 then 1 else 0 end) > 0 
      then max(case when "0MOVETYPE" = 101 then "0PSTNG_DATE" end) 
     end) as Last_Sales_Date 
\FROM "NM1"."PUBLIC"."IZDSO_DMR" Table__1 
Group By "0MATERIAL", "0PLANT"; 

这将返回“602”的最后一个销售日期(如果有的话)。如果不存在,则返回最后一个销售日期“601”。如果既不存在“601”也不存在“602”,则转到“102”等。

+0

非常感谢您的帮助,您提供的代码工作完美。我还想选择运动类型,如果我通过得到错误的结果将运动类型添加到组中,我该如何克服这一点。 – user3209594