Iseries i查看项目

时间:2013-11-01 13:00:40

标签: sql ibm-midrange crystal-reports-xi db2-400

我想在视图中执行此操作。

我有一个使用表ordertrans的水晶reprt。该表包含有关订单的数据。这是一个MFG。公司等订单通常是定制的,每个拼图都会列在这张桌子上。包装代码PDB。之前的CR加入订单号并在001上选择记录。我在PDB上也添加了记录选择。我想要一个只会选择一次PDB的视图。如果它们超过1,则很可能出现某种错误或罕见情况,并且不适用于该报告。问题是第二个PDB导致格式错误不在报告中,而是在EXCEL EXPORT中。我想要使​​用的视图而不是当前的视图。虽然现在只选择001或打包代码,但我认为理论上我们只能选择001和pdb实际上是3这样的代码我提到了一个简化。

订单#TRNCDE

123 001
123 999
123 PDB
123 AAA
123 BBB
123 PDB

123 CCC

2 个答案:

答案 0 :(得分:3)

假设ORDERTRANS中有一个行号或序列号,请为每个唯一订单/ trncde组合选择最低的一个:

with min as 
  (select order#, trncde, min(line#) as line#
   from ordertrans
   group by order#, trncde)
select *
from ordertrans o
  join min m on o.order#=m.order# and
                o.trncde=m.trncde and
                o.line#=m.line#
order by order#, trncde;

如果没有唯一的行号,时间戳或序列号来帮助您区分PDB行,请考虑尝试RRN:

with min as 
  (select order#, trncde, rrn(ordertrans) as line#
   from ordertrans
   group by order#, trncde)
select *
from ordertrans o
  join min m on o.order#=m.order# and
                o.trncde=m.trncde and
                rrn(o)=m.line#
order by order#, trncde;

答案 1 :(得分:0)

RRN()将导致索引构建,从而导致性能下降。 (据Birgitta Hauser说)

如果没有唯一的行号,时间戳或序列号来帮助您区分PDB行,请考虑生成ROW_NUMBER():

with min as 
(select order#, trncde, 
        ROW_NUMBER() OVER(PARTITION BY order# ORDER BY another_col) as pick
   from ordertrans
   group by order#, trncde
) 
select *
  from ordertrans o
  join min        m    on  o.order#=m.order# 
                       and o.trncde=m.trncde 
                       and m.pick = 1
  order by order#, trncde;