Sql Iseries i视图项目
我想从一个角度来做这件事 我有一个crystal Report,它使用ordertrans表。此表包含有关订单的数据。这是一家制造公司,所以订单通常是定制的,每一块拼图都会列在这张表上。包装代码PDB。之前的CR在订单号上加入,并在001上记录选择。我在PDB上也添加了记录选择。我想要一个只选择一次PDB的视图。如果它们的数量超过1,则很可能是某种错误或罕见情况,不适用于报告。问题在于,第二个PDB不是在报告中而是在EXCEL导出中导致格式错误。我希望使用一个视图,而不是当前视图。虽然当前的代码并不是只选择001或包装代码,但我认为理论上我们只能选择001和pdb代码,实际上有3个这样的代码,我提到其中一个是为了简化 订单交易 123001 123 999 123 PDB 123 AAA 123桶 123 PDBSql Iseries i视图项目,sql,ibm-midrange,crystal-reports-xi,db2-400,Sql,Ibm Midrange,Crystal Reports Xi,Db2 400,我想从一个角度来做这件事 我有一个crystal Report,它使用ordertrans表。此表包含有关订单的数据。这是一家制造公司,所以订单通常是定制的,每一块拼图都会列在这张表上。包装代码PDB。之前的CR在订单号上加入,并在001上记录选择。我在PDB上也添加了记录选择。我想要一个只选择一次PDB的视图。如果它们的数量超过1,则很可能是某种错误或罕见情况,不适用于报告。问题在于,第二个PDB不是在报告中而是在EXCEL导出中导致格式错误。我希望使用一个视图,而不是当前视图。虽然当前的代码
123 CCC假设ORDERTRANS中有一个行号或序列号,为每个唯一的订单/交易代码组合选择最低的一个:
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;
假设ORDERTRANS中有行号或序列号,请为每个唯一订单/交易代码组合选择最低的行号或序列号:
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;
假设ORDERTRANS中有行号或序列号,请为每个唯一订单/交易代码组合选择最低的行号或序列号:
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;
假设ORDERTRANS中有行号或序列号,请为每个唯一订单/交易代码组合选择最低的行号或序列号:
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;
RRN将导致索引生成,导致性能下降。据Birgitta Hauser说
如果没有唯一的行号、时间戳或序列号来帮助区分PDB行,则考虑生成ROWL编号:
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;
RRN将导致索引生成,导致性能下降。据Birgitta Hauser说
如果没有唯一的行号、时间戳或序列号来帮助区分PDB行,则考虑生成ROWL编号:
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;
RRN将导致索引生成,导致性能下降。据Birgitta Hauser说
如果没有唯一的行号、时间戳或序列号来帮助区分PDB行,则考虑生成ROWL编号:
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;
RRN将导致索引生成,导致性能下降。据Birgitta Hauser说
如果没有唯一的行号、时间戳或序列号来帮助区分PDB行,则考虑生成ROWL编号:
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;