SELECT hd_sctzd_dtl.tlno,   
         hd_sctzd_dtl.perqty,   
         hd_sctzd_dtl.totalqty,   
         hd_sctzd_dtl.unitno,   
         hd_sctzd_dtl.unitnocims,   
         hd_sctzd_dtl.bpno,   
         hd_sctzd.scno,   
         hd_sctzd.itemno,   
         isnull(send.sendqty,0) as sqty
    FROM hd_sctzd_dtl,   
         hd_sctzd,
(
SELECT tlno,bpno,sum(sqty) as sendqty
from hd_clckck,hd_clckck_dtl 
WHERE (  hd_clckck_dtl.sendno=hd_clckck.sendno ) 
GROUP BY tlno,bpno
) as send 
WHERE ( hd_sctzd_dtl.tlno = hd_sctzd.tlno ) 
and hd_sctzd_dtl.bpno *=send.bpno and hd_sctzd_dtl.tlno *=send.tlno
ORDER BY hd_sctzd.scno,hd_sctzd_dtl.tlno,hd_sctzd_dtl.bpno ASC   如果返回hd_sctzd_dtl.totalqty = sqty 或者hd_sctzd_dtl.totalqty <> sqty的结果集???谢谢!

解决方案 »

  1.   

    try--hd_sctzd_dtl.totalqty = sqty
    SELECT hd_sctzd_dtl.tlno,   
             hd_sctzd_dtl.perqty,   
             hd_sctzd_dtl.totalqty,   
             hd_sctzd_dtl.unitno,   
             hd_sctzd_dtl.unitnocims,   
             hd_sctzd_dtl.bpno,   
             hd_sctzd.scno,   
             hd_sctzd.itemno,   
             isnull(send.sendqty,0) as sqty
        FROM hd_sctzd_dtl,   
             hd_sctzd,
    (
    SELECT tlno,bpno,sum(sqty) as sendqty
    from hd_clckck,hd_clckck_dtl 
    WHERE (  hd_clckck_dtl.sendno=hd_clckck.sendno ) 
    GROUP BY tlno,bpno
    ) as send 
    WHERE ( hd_sctzd_dtl.tlno = hd_sctzd.tlno ) 
    and hd_sctzd_dtl.bpno *=send.bpno and hd_sctzd_dtl.tlno *=send.tlno
    and hd_sctzd_dtl.totalqty =  isnull(send.sendqty,0) --
    ORDER BY hd_sctzd.scno,hd_sctzd_dtl.tlno,hd_sctzd_dtl.bpno ASC  --hd_sctzd_dtl.totalqty <> sqty
    SELECT hd_sctzd_dtl.tlno,   
             hd_sctzd_dtl.perqty,   
             hd_sctzd_dtl.totalqty,   
             hd_sctzd_dtl.unitno,   
             hd_sctzd_dtl.unitnocims,   
             hd_sctzd_dtl.bpno,   
             hd_sctzd.scno,   
             hd_sctzd.itemno,   
             isnull(send.sendqty,0) as sqty
        FROM hd_sctzd_dtl,   
             hd_sctzd,
    (
    SELECT tlno,bpno,sum(sqty) as sendqty
    from hd_clckck,hd_clckck_dtl 
    WHERE (  hd_clckck_dtl.sendno=hd_clckck.sendno ) 
    GROUP BY tlno,bpno
    ) as send 
    WHERE ( hd_sctzd_dtl.tlno = hd_sctzd.tlno ) 
    and hd_sctzd_dtl.bpno *=send.bpno and hd_sctzd_dtl.tlno *=send.tlno
    and hd_sctzd_dtl.totalqty !=  isnull(send.sendqty,0) --
    ORDER BY hd_sctzd.scno,hd_sctzd_dtl.tlno,hd_sctzd_dtl.bpno ASC
      

  2.   

    to paoluo(一天到晚游泳的鱼) :--hd_sctzd_dtl.totalqty <> sqty :
    执行结果是:服务器: 消息 303,级别 16,状态 1,行 1
    表 'send' 是外联接子句的内部成员。如果该表同时也包含在常规联接子句中,那么这种情况是不允许的。我上面的语句意思是这样的:
    hd_sctzd,hd_sctzd_dtl是应发表,hd_clckck,hd_clckck_dtl是出库表,我要统计有多少货物没有出库.(一次应发可以分多次出库)谢谢!!
      

  3.   

    原來是*=的問題。try--hd_sctzd_dtl.totalqty <> sqty
    SELECT hd_sctzd_dtl.tlno,   
             hd_sctzd_dtl.perqty,   
             hd_sctzd_dtl.totalqty,   
             hd_sctzd_dtl.unitno,   
             hd_sctzd_dtl.unitnocims,   
             hd_sctzd_dtl.bpno,   
             hd_sctzd.scno,   
             hd_sctzd.itemno,   
             isnull(send.sendqty,0) as sqty
        FROM hd_sctzd_dtl
    Inner Join
             hd_sctzd
    On hd_sctzd_dtl.tlno = hd_sctzd.tlno
    Left Join
    (
    SELECT tlno,bpno,sum(sqty) as sendqty
    from hd_clckck,hd_clckck_dtl 
    WHERE (  hd_clckck_dtl.sendno=hd_clckck.sendno ) 
    GROUP BY tlno,bpno
    ) as send 
    On hd_sctzd_dtl.bpno =send.bpno and hd_sctzd_dtl.tlno =send.tlno
    where hd_sctzd_dtl.totalqty !=  isnull(send.sendqty,0) --
    ORDER BY hd_sctzd.scno,hd_sctzd_dtl.tlno,hd_sctzd_dtl.bpno ASC
      

  4.   

    成功了!!!!!!!!!!!!!!!谢谢!!!!!!!!!!!!!悄悄问一下,为什么用where 连不行啊!
      

  5.   

    盡量避免使用*=這種寫法,而改為用left join來寫。具體什麼原因出現導致你這個錯誤,我也不清楚。
    在 MicrosoftR SQL Server? 2000 之前的版本中,左、右外部聯結 (Outer Join) 條件必須在 WHERE 子句中使用 *= 與=* 運算子來指定。部份情況中,這種語法可以使用多種方式解譯,可能會導致模糊不清的查詢。SQL-92 批評在 FROM 子句中指定外部聯結的語法而且 SQL-92 不會產生這種模稜兩可的情形,因為 SQL-92 語法更精確,有關在 WHERE 子句中舊的 Transact-SQL 外部聯結語法的詳細資訊並不包含在這個版本中。在未來 SQL Server 版本中可能不會支援這個語法。任何使用 Transact-SQL 外部聯結的陳述式都應該改為使用 SQL-92 的語法。無論是 FROM 或 WHERE 子句中內部聯結的規格,SQL-92 標準並不支援。WHERE 子句中指定的內部聯結不會有如同 Transact-SQL 外部聯結語法中模稜兩可的相同問題。