Приоритеты в запросе выбора с oracle - PullRequest
0 голосов
/ 08 мая 2020

Я использую следующий запрос для отчета.

      SELECT P.PIECE_ID,spd.IS_MAIN_DEFECT,spd.PIECE_DEFECT_NUM_ID
      FROM piece P , STY_PIECE_DEFECT spd ,STY_DEFECT_CATALOGUE sdc ,piece_history ph , 
      piece_history_out pho, PLANT_CONFIG pc,STY_QUALITY sq 
      (...join and where clauses)
      GROUP BY P.PIECE_ID,spd.IS_MAIN_DEFECT,spd.PIECE_DEFECT_NUM_ID ORDER BY 1 desc

Результат:

enter image description here

Но я хочу увидеть следующий результат в моем выводе;

IS_MAIN_DEFECT будет проверяться как приоритет.

Если это 'Y', я увижу только эту строку в таблице, иначе это 'N', тогда Я увижу только эту строку min (piece_defect_num_id) в таблице.

Например: мне нужно увидеть этот piece_defect_num_id как 141900 для '20190158GA',

Если все значения IS_MAIN_DEFECT равны 'N' для '20190158GA' мне нужно увидеть этот параметр piece_defect_num_id как 141 476.

1 Ответ

1 голос
/ 08 мая 2020

в этом случае может быть полезна функция analyti c

  SELECT P.PIECE_ID
  , spd.IS_MAIN_DEFECT
  ,spd.PIECE_DEFECT_NUM_ID
  -- check if defect is the main one or not
  , CASE WHEN spd.is_main_defect = 'N' THEN
      min(spd.piece_defect_num_id) OVER (partition by p.PIECE_ID)
    ELSE NULL END as min_defect

  FROM piece P , STY_PIECE_DEFECT spd ,STY_DEFECT_CATALOGUE sdc ,piece_history ph , 
  piece_history_out pho, PLANT_CONFIG pc,STY_QUALITY sq 
  (...join and where clauses)
  GROUP BY P.PIECE_ID,spd.IS_MAIN_DEFECT,spd.PIECE_DEFECT_NUM_ID ORDER BY 1 desc

Трудно предоставить работоспособный запрос без полных определений таблиц / запросов, однако пример можно найти здесь

Чтобы повторить совет, упомянутый @Gordon Linoff - попробуйте использовать синтаксис ANSI JOIN, если возможно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...