Самостоятельно объединить таблицу и включить объединяющие столбцы в оба запроса как один столбец. - PullRequest
0 голосов
/ 21 октября 2019

Итак, это мой стол

Machine No | Cut off Date | status    | event number
================================================
        12 | 01-DEC-2018  | Pending   | 8888
        23 | 01-DEC-2018  | Available | 9999
        12 | 01-DEC-2019  | Available | 8888
        23 | 01-DEC-2019  | Available | 9999
        66 | 01-DEC-2018  | Pending   | 6666

Ожидаемый результат : cy (текущий год) - 2018 год (прошлый год) -2017

Machine_No |  cy_status   | cy_event number|ly_status |ly_event_number
==================================================================
   12      |  Pending     |  8888          |Available | 8888
   23      |  Available   |  9999          |Available | 9999
   66      |  NULL        |  NULL          |Pending   | 6666

Мой текущий запрос и результат:

    SELECT  cy.Machine_No AS Mac_No, ly.Machine_No AS Mac_no, 
    CY_EVENT_NUM, CY_STATUS,
        LY_EVENT_NUM,
        LY_STATUS from
         (      SELECT
                  machine_number AS Machine_No, EVENT_NUMBER AS 
    CY_EVENT_NUM, STATUS AS CY_STATUS
        FROM
          center c
        WHERE
          cut_off_date = '01-DEC-2018'
        AND machine_number IN ('6666', '7777', '8888', '9999')) cy 
    FULL OUTER JOIN (
        SELECT
          machine_number AS Machine_No , EVENT_NUMBER AS 
    LY_EVENT_NUM, STATUS AS LY_STATUS
        FROM
          center c1
        WHERE
          cut_off_date = '01-DEC-2017'
        AND machine_number IN ('6666', '7777', '8888', '9999') )ly 
    on  
    cy.Machine_No= ly.Machine_No'''

Результат :

Mac_No|Mac_No|cy_status     |cy_event number |ly_status|ly_event_number
=====  =====    ======        ==============   ========  =========
   12 | NULL |  Pending     |  8888          |Available| 8888
   23 | NULL |  Available   |  9999          |Available| 9999
  NULL| 66   |  NULL        |  NULL          |   NULL  | 7777

Я cy.Mac_no и ly.Mac_no в одном столбце.

Может кто-нибудь помочьмне добиться этого?

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Я думаю, что ваш запрос можно упростить, используя условное агрегирование, следующим образом:

select 
    machin_no,
    max(case when extract(year from cut_off_date) = 2018 then status end) cy_status,
    max(case when extract(year from cut_off_date) = 2018 then event_number end) cy_event_number,
    max(case when extract(year from cut_off_date) = 2017 then status end) ly_status,
    max(case when extract(year from cut_off_date) = 2017 then event_number end) ly_event_number
from center
group by machine_no

То, как вы обрабатываете даты, мне не очень понятно, поэтому я основал запрос только на годе (либо cut_off_date равен 2017, либо 2018).

Если вам нужно отфильтровать по точной дате, вы можете изменить условные максимумы следующим образом:

max(case when cut_off_date = to_date('2018-12-01', 'yyyy-mm-dd') then status end) cy_status,
... and so on ...

Вышевыражение предполагает, что вы используете оракул.

0 голосов
/ 21 октября 2019

Если ваша проблема состоит только в том, чтобы иметь один столбец, вы можете попробовать это:

SELECT 
    IFF(cy.Machine_No IS NULL, ly.Machine_No, cy.Machine) AS Machine_No, 
    [... rest of your query]
...