2014-01-18 3 views
0

У меня есть завод, материал, вид движения и дата.Корпус с

Моего требования, я хочу дату MAX в материальной и растениях комбинации, с условием типа движения

Сначала мне нужна дата MAX в материалах и комбинации растений, где тип передвижения 602, если 602 равно нуль, то 601, если 601 имеет значение null, то 102, если 102 имеет значение null, тогда 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

Добро пожаловать в Переполнение стека. Чтобы отформатировать блок кода, вам не нужно добавлять разрывы строк. Выделите блок кода и нажмите кнопку панели инструментов '{}' в редакторе или 'ctl-k'. Это приведет к добавлению предыдущей строки и отступом в каждой строке 4 пробела в качестве кода. При правильной маркировке это также заставляет выделять синтаксис. –

+0

Переместите CASE в функцию MAX. – 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, потому что сравнение превращается в число. Однако я не думаю, что это то, что вы хотите. Вы хотите определить приоритет значения 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» и так далее.

+0

Большое спасибо за помощь, код, который вы дали, работает отлично. Я также хотел бы выбрать тип Movement, если я добавлю тип Movement в группу, получив неправильный результат, как я могу это преодолеть. – user3209594

Смежные вопросы