我想在视图中执行此操作。
我有一个使用表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
答案 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;