【问题标题】:Case With Having有的情况
【发布时间】:2014-02-08 00:29:39
【问题描述】:

我有植物、材料、运动类型和日期。

我的要求是我想要材料和工厂组合中的 MAX 日期,以及运动类型条件

首先我需要材料和植物组合中的 MAX 日期,其中运动类型为 602,如果 602 为空则为 601,如果 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 运动类型

请帮助我得到正确的结果

【问题讨论】:

  • 欢迎来到 Stack Overflow。要格式化代码块,您无需添加换行符。突出显示代码块并单击编辑器中的{} 工具栏按钮,或ctl-k。这样做将添加前面的换行符并将每行缩进 4 个空格作为代码。如果标记得当,这也会强制语法高亮。
  • 在MAX函数中移动CASE。

标签: sql case


【解决方案1】:

这是你的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”,依此类推。

【讨论】:

  • 非常感谢您的帮助,您提供的代码运行良好。我也想选择运动类型,如果我通过得到错误的结果将运动类型添加到组中,我该如何克服这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
相关资源
最近更新 更多