Oracle SQL查询行到列

时间:2016-01-08 16:09:40

标签: sql oracle pivot

table

我在表格中有上述数据,我想要实现的是以下

期望的结果

ITMCOD    BUOMNUM     BUOMDEN   BUOMNUM_CS
80240277  10000        4444        200

很抱歉由于某种原因,我无法将其格式化为表格。 MNy当前的sql只能返回图像中显示的结果。

我只对UOM是CS或SU的行感兴趣,但是BUOMNUM字段包含两个条目,我需要在不同的列中。一个用于UOM是CS,另一个用于UOM是SU。

什么是sql代码请这样做?我的同事提出了一个PIVOT功能,但我不能让它工作。我正在使用Oracle 11g。

欢呼声

编辑:

这是我的SQL,它生成了我试图进一步查询以产生上述所需结果的产品列表:

SELECT * 
FROM   ( 
              SELECT     m.itmcod, 
                         m.itmgrp, 
                         m.itmdsc, 
                         u.buomden, 
                         u.buomnum, 
                         u.uom AS unit 
              FROM       itmmst m 
              inner join item_uom u 
              ON         m.itmcod = u.itmcod 
              WHERE      u.uom IN ('CS','SU') 
    ) 
        PIVOT (count(unit) FOR unit IN ('CS' cs,'SU' su) )

这段代码有效,我正在努力将CS和SU分开,如上所述。

欢呼声

2 个答案:

答案 0 :(得分:0)

你可以这样做。如果您只有一行包含SU,而另一行包含每个ITMCOD值的CS,则它可以正常工作。如果您有更多,那么我们需要标准来选择您想要显示哪个CS和哪个SU。 在下面的例子中,我假设你想从SU行看到BUOMDEN。

> gradle bar
>

答案 1 :(得分:0)

我最终使用了这种方法,避免了所有的聚合

select x.itmcod,x.itmdsc,
MAX(DECODE(x.unit,'SU',x.buomden)) BuomDEN_SU,
MAX(DECODE(x.unit,'SU',x.buomnum)) BuomNUM_SU,
MAX(DECODE(x.unit,'CS',x.buomnum)) Buomnum_CS,
COALESCE(((MAX(DECODE(x.unit,'SU',x.buomden))/MAX(DECODE(x.unit,'SU',x.buomnum))  )* MAX(DECODE(x.unit,'CS',x.buomnum))),0) CALCULATED_SU
from (
              SELECT     m.itmcod, 
                         m.itmgrp, 
                         m.itmdsc, 
                         u.buomden, 
                         u.buomnum, 
                         u.uom AS unit 
              FROM       itmmst m 
              inner join item_uom u 
              ON         m.itmcod = u.itmcod 
              WHERE      u.uom IN ('CS','SU') 
  ) x
  group by x.itmcod,x.itmdsc