我有植物,材料,移动类型和日期。
我的要求是我希望物料和工厂组合中的MAX日期,运动类型条件
首先我需要在材质和植物组合中使用MAX日期,其中移动类型为602,如果602为空则为601,如果601为空则为102,如果102为空则为101,如果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种运动类型
请帮助我获得正确的结果
答案 0 :(得分: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引擎,因为比较转换为数字。但是,我不认为这是你想要的。您希望根据max()
列确定0MoveType
值的优先级。
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”,依此类推。