订单表(ORDER):
A 单据,里面有多行:
物品     跟踪号(唯一)   数量
a        001               200
b        002               300
c        003               400
d        004               500系统根据订单生成出库单(out):
A单据记录
a        001               100B单据记录
a        001               100
b        002               300
c        003               400C单据记录
d        004               400
D单据记录
d        004               100系统根据出库生成发票(SALE):
A单据记录
a        001               200
b        002               300
B单据记录
c        003               400
系统根据发票生成收款(SK):
A单据记录
a        001               200
b        002               300
c        003               400
以上是四个表名,如果直接用跟踪号关联起来,会出现最大行数。
比如查001这个跟踪号,订单其实只有一行,显示一行,就好,关联起来后会显示多行相同记录,其他几个表也是,显示多行现在是要解决每种表发生过几行就显示几行,并且左右对应起来,每个表的行数不确定,也不确定是哪个表会比较多比较少。求解,谢谢。

解决方案 »

  1.   

    请教先MARK是什么意思呢?对于我这语句该如何写?谢谢
      

  2.   

    看了两遍没太懂楼主的意思;
    对于不确定的因素,利用动态sql拼接查询,参数传对即可;
    对于现实多行什么之类问题,弄清楚外连接的特性。。
      

  3.   

    SELECT A.PRD_NO,A.QTY,SUM(B.QTY) OUT_QTY,SUM(C.AMT) 发票,sum(d.amt) 收款FROM ORDER A LEFT OUTER JOIN OUT B ON A.NO =B.A_NO AND B.A_ITEM =A.ITEM
                 LEFT OUTER JOIN SALE C ON C.B_NO =B.NO AND C.B_ITEM = B.ITEM
                 LEFT OUTER JOIN SK D ON D.C_NO =C.NO AND D.C_ITEM = C.ITEM
    WHERE 
    GROUP BY A.PRD_NO,a.no,a.item 大概这个样子,我3年没写SQL了。。
      

  4.   

    看了一会,还是不明白楼主的意思,感觉把表join起来,分组就行了。