我有工厂,材料,移动类型和日期。
我的要求是我想要物料和工厂组合中的最大日期,具有移动类型条件
首先我需要物料和工厂组合中的最大日期,其中移动类型为602,如果602为null,则为601,如果601为null,则为102,如果102为null,则为101,如果101也为null,则为其它移动类型。
为此,我在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个移动类型
请帮助我得到正确的结果
发布于 2014-01-19 02:47:16
这是您的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“,依此类推。
https://stackoverflow.com/questions/21206857
复制相似问题