需要编写SQL来完成3 QUERY / 400所做的工作

时间:2014-04-09 22:34:29

标签: sql ibm-midrange db2-400

我必须编写一个逻辑视图或2来处理旧版Query / 400。第一个查询创建一个输入到第二个查询的临时文件(第二个查询创建temp到第三个查询)。目的是我们希望看到哪些客户没有我们在第二个查询中获得的“更正”订单。

在第一个查询中,它从OEINH1中选择并匹配Address_Table以获取客户电子邮件地址,并选择

T01.IHDOCD        DOCUMENT DATE                
T01.IHENT#        ENTITY NUMBER                
T01.IHSFX#        SUFFIX NUMBER                
T01.IHINV#        INVOICE NUMBER               
T02.ADINTA        INTERNET ADDRESS             

这些列和记录选择:

IHORDT            EQ     'INT'        **** order type              
AND    IHVIAC            NLIST  'PML' 'FCM'               
AND    ADSFX#            EQ     '000'          
  1. IHENT上的第二个查询匹配#(cust#)AND选择:

    IHORDT            LIST   'COR' 'COE'     
    

    并将第一个temp和同一个OEINH1中的所有列写入第二个临时文件。

  2. 这在SQL中重做这个是有问题的,因为有重复 字段名称。基本上我需要的是采取第一个临时文件 然后获得该客户拥有的其他2种订单类型(COR COE)

    这个像这样的

    Select * 
    from TEMP FILE1 
    where ENT in (Select * 
                  from OEINH1 
                  where IHORDT in ('COR' "COE')
    

    根据查询/ 400正在做什么这有意义吗?

    最后的QUERY / 400然后使用UNMATCHED比较2个临时文件的连接类型。那么我们就可以知道哪些记录在第一次传递中而不在第二次临时文件中。

1 个答案:

答案 0 :(得分:1)

使用Query创建临时文件,然后另一个Query创建另一个临时文件,最后一个第三个查询来处理该文件,这与我们思考SQL的方式相反。 SQL是关于操纵记录集的。

这是未经测试的:

select h.IHDOCD, h.IHENT#, h.IHSFX#, h.IHINV#, a.ADINTA
from OEINH1 h 
  join Address_Table a
    on h.ihent# = a.customer_id
where h.IHORDT = 'INT'
  AND h.IHVIAC not in ('PML' 'FCM')
  AND ADSFX# = '000' 
  and h.ihent# in (
    select cor.ihent# 
      from oeinh1 cor
      where cor.IHORDT in ('COR' 'COE'))