请帮助获得办公室明智的数据行

Kindly help to get office wise data row wise

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

我想要办公室明智的数据。如果存在 8 月的数据,那么它应该显示 1,否则显示 0。其他月份也是如此。但是在我的查询中,单独的行显示了不同的月份。

基本上,您必须仅按 NUM_OFC_CODE,NUM_RO_CODE 对数据进行分组(不包括 TXT_MONTH,因为您不希望 TXT_MONTH 的每个实例都有一行),然后使用类似 NVL(MAX(CASE WHEN TXT_MONTH='JAN' THEN 1 END), 0) as JAN(使用聚合函数来决定条目是否存在)等

使用数据透视表更容易:

-- 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

您的查询非常好,只需要做几处更改。

  1. 从分组依据中删除 txt_month。
  2. 在所有 case 语句中使用 Max。

因此您的查询应如下所示

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;

干杯!!