Sql Iseries i视图项目

Sql 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导出中导致格式错误。我希望使用一个视图,而不是当前视图。虽然当前的代码

我想从一个角度来做这件事

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

订单交易

123001 123 999 123 PDB 123 AAA 123桶 123 PDB
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;