我在表格中有上述数据,我想要实现的是以下
期望的结果
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分开,如上所述。
欢呼声
答案 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