【问题标题】:Kindly help to get office wise data row wise请帮助获取办公室明智的数据行
【发布时间】:2019-09-25 11:18:07
【问题描述】:
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。其他月份也是如此。但在我的查询中,单独的行显示了单独的月份。

【问题讨论】:

    标签: oracle monthcalendar


    【解决方案1】:

    基本上,您必须仅按 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
    

    【讨论】:

    • 执行查询显示以下错误:-“ORA-00933:SQL 命令未正确结束”。
    • 我已经使用单引号,双引号如下'JUL'作为“JUL”。但它没有工作。
    • 您使用的是哪个 oracle 版本?你的版本可能不支持pivot-queries。
    • 是的。谷歌搜索后,我知道 10g 不支持 Pivot。顺便谢谢。
    【解决方案2】:

    您的查询非常好,只需要进行一些更改。

    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;
    

    干杯!!

    【讨论】:

    • 你为什么复制我的解决方案?这正是我在答案的上半部分所说的......
    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    相关资源
    最近更新 更多