Oracle SQL - как объединить несколько строк в одну в избранном - PullRequest
0 голосов
/ 16 октября 2018

Из следующего запроса:

SELECT id
    , typ_produktu
    , miary_wewnetrzne
    , CASE
         WHEN symbol LIKE '760%' THEN SUM(sal-type_number)
       ELSE NULL
      END sum_760
    , CASE
        WHEN symbol LIKE '860%' THEN SUM(sal-type_number)
       ELSE NULL
      END sum_860 
 FROM 537_MV 
WHERE
      rep_date = 20180930
      AND id   = 'DP\1601'
      AND miary_wewnetrzne IN ('WN', 'wynik')
      AND typ_w IN( 'RT_SZT', 'brak') 
GROUP BY
      id
    , symbol
    , typ_produktu
    , miary_wewnetrzne
    , typ_w

Я получаю эту таблицу:

id      typ_produktu miary_wewnetrzne sum760 sum860
------- ------------ ---------------- ------ ------
DP\1601 brak         wynik                17      0
DP\1601 brak         wynik                 9      0
DP\1601 brak         wynik                 1      0
DP\1601 brak         wynik                 0      1
DP\1601 AIN          WN                    0      0

Как мне написать свой запрос, чтобы получить только одну запись в таблице для идентификатора (то есть DP \1601), если typ_produktu = 'brak', я хотел бы заменить его на любой другой для этого идентификатора, в примере это будет 'AIN'.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Вы можете использовать агрегацию:

SELECT id,
       COALESCE(MAX(CASE WHEN typ_produktu <> 'BRAK' THEN typ_produktu END), MAX(typ_produktu)) as typ_produktu
       MAX(miary_wewnetrzne)
       SUM(CASE WHEN symbol LIKE '760%' THEN sal - type_number END) as sum_760
       SUM(CASE WHEN symbol LIKE '860%' THEN sal - type_number END) as sum_860 
FROM 537_MV
WHERE rep_date = 20180930 AND
      id   = 'DP\1601' AND
      miary_wewnetrzne IN ('WN', 'wynik') AND
      typ_w IN ( 'RT_SZT', 'brak')
GROUP BY id;

Обратите внимание, что если вы хотите одну строку на id, то это должен быть единственный столбец в GROUP BY.

0 голосов
/ 16 октября 2018

Используйте условное агрегирование и удалите столбец typ_w из группы по

SELECT id
    , typ_produktu
    , miary_wewnetrzne
    , sum(CASE
                WHEN symbol LIKE '760%'
                THEN sal-type_number
                ELSE 0
      END) as sum_760
    , sum(CASE
                WHEN symbol LIKE '860%'
                THEN sal-type_number
                ELSE 0
      END) as sum_860 FROM
      537_MV WHERE rep_date = 20180930 AND id   = 'DP\1601'
      AND miary_wewnetrzne IN ('WN', 'wynik')
      AND typ_w IN( 'RT_SZT', 'brak') GROUP BY
      id, typ_produktu, miary_wewnetrzne
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...