Пожалуйста, помогите получить офис мудрый ряд данных мудрый - PullRequest
0 голосов
/ 25 сентября 2019
select NUM_OFC_CODE,NUM_RO_CODE, 
 case when TXT_MONTH='JAN' then 1 ELSE 0 end as JAN,
case when TXT_MONTH='FEB' then 1 ELSE 0  end as FEB,
case when TXT_MONTH='MAR' then 1  ELSE 0 end as MAR,
case when TXT_MONTH='APR' then 1 ELSE 0  end as APR,
case when TXT_MONTH='MAY' then 1 ELSE 0  end as MAY,
case when TXT_MONTH='JUN' then 1 ELSE 0 end as JUN,
case when TXT_MONTH='JUL' then 1 ELSE 0 end as JUL,
case when TXT_MONTH='AUG' then 1 ELSE 0 end as AUG,
case when TXT_MONTH='SEP' then 1 ELSE 0  end as SEP,
case when TXT_MONTH='OCT' then 1 ELSE 0  end as OCT,
case when TXT_MONTH='NOV' then 1 ELSE 0  end as NOV,
case when TXT_MONTH='DEC' then 1 ELSE 0 end as DEC 
 from LEG_OMBUDSMAN_NONMACT where
 NUM_YEAR=2019   group by NUM_OFC_CODE,TXT_MONTH,NUM_RO_CODE;

Результат отображается следующим образом: -

NUM_OFC_CODE    NUM_RO_CODE JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC

280400          280000      0   0   0   0   0   0   0   1           0   0
282300          280000      0   0   0   0   0   0   0   1   0       0   0
281600          280000      0   0   0   0   0   0   0   1   0       0   0
280500          280000      0   0   0   0   0   0   1   0   0       0   0
280500          280000      0   0   0   1   0   0   0   0   0       0   0
281800          280000      0   0   0   0   0   0   0   1   0       0   0
282200          280000      0   0   0   0   0   0   0   1   0       0   0
280500          280000      0   0   0   0   1   0   0   0   0       0   0
280500          280000      0   0   0   0   0   1   0   0   0       0   0
280500          280000      0   0   0   0   0   0   0   1   0       0   0
281300          280000      0   0   0   0   0   0   0   1   0       0   0

Я хочу получить офисные данные.Если данные за август присутствуют, то должно отображаться 1 или 0. Аналогично для других месяцев.Но в моем запросе отдельная строка отображается для отдельных месяцев.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Ваш запрос в порядке, просто нужно внести пару изменений.

  1. Удалить txt_month из группы с помощью.
  2. Использовать Max во всех операторах case.

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

select NUM_OFC_CODE,
    NUM_RO_CODE, 
    Max(case when TXT_MONTH='JAN' then 1 ELSE 0 end) as JAN,
    Max(case when TXT_MONTH='FEB' then 1 ELSE 0  end) as FEB,
    Max(case when TXT_MONTH='MAR' then 1  ELSE 0 end) as MAR,
    Max(case when TXT_MONTH='APR' then 1 ELSE 0  end) as APR,
    Max(case when TXT_MONTH='MAY' then 1 ELSE 0  end) as MAY,
    Max(case when TXT_MONTH='JUN' then 1 ELSE 0 end) as JUN,
    Max(case when TXT_MONTH='JUL' then 1 ELSE 0 end) as JUL,
    Max(case when TXT_MONTH='AUG' then 1 ELSE 0 end) as AUG,
    Max(case when TXT_MONTH='SEP' then 1 ELSE 0  end) as SEP,
    Max(case when TXT_MONTH='OCT' then 1 ELSE 0  end) as OCT,
    Max(case when TXT_MONTH='NOV' then 1 ELSE 0  end) as NOV,
    Max(case when TXT_MONTH='DEC' then 1 ELSE 0 end) as DEC 
     from LEG_OMBUDSMAN_NONMACT 
    where NUM_YEAR=2019   
    group by NUM_OFC_CODE ,NUM_RO_CODE;

Cheers !!

0 голосов
/ 25 сентября 2019

В основном вам нужно сгруппировать данные только по NUM_OFC_CODE,NUM_RO_CODE (исключая TXT_MONTH, так как вы не хотите строки для каждого экземпляра TXT_MONTH), а затем использовать что-то вроде NVL(MAX(CASE WHEN TXT_MONTH='JAN' THEN 1 END), 0) as JAN (используя функцию агрегирования, чтобы определить, будет ли записьсуществует или нет) и т. д.

Проще с использованием pivot:

-- Just some sampledata:
WITH LEG_OMBUDSMAN_NONMACT(NUM_OFC_CODE, NUM_RO_CODE, NUM_YEAR, TXT_MONTH) AS
  (SELECT 1,1,2019, 'JAN' FROM dual union ALL
  SELECT 1,1,2019, 'FEB' FROM dual)
-- Here starts the actual query:
SELECT NUM_OFC_CODE, NUM_RO_CODE
     , NVL(JAN,0) AS JAN
     , NVL(FEB,0) AS FEB
     , NVL(MAR,0) AS MAR
     , NVL(APR,0) AS APR
     , NVL(MAY,0) AS MAY
     , NVL(JUN,0) AS JUN
     , NVL(JUL,0) AS JUL
     , NVL(AUG,0) AS AUG
     , NVL(SEP,0) AS SEP
     , NVL(OCT,0) AS OCT
     , NVL(NOV,0) AS NOV
     , NVL(DEC,0) AS DEC
  FROM LEG_OMBUDSMAN_NONMACT
  pivot (MAX(1) FOR TXT_MONTH IN ('JAN' AS JAN,'FEB' AS FEB,'MAR' as MAR, 'APR' as APR, 'MAY' as MAY, 'JUN' as JUN, 'JUL' as JUL, 'AUG' as AUG, 'SEP' as SEP, 'OCT' as OCT, 'NOV' as NOV, 'DEC' as DEC ))
 WHERE NUM_YEAR=2019
...