0

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

我有一个使用表 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

4

2 回答 2

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;
于 2013-11-01T14:53:12.613 回答
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;
于 2013-11-05T06:05:16.567 回答