2014-09-24 111 views
1

以下SQL查詢查找與某些需求相匹配的訂單,然後在此階段創建帶有發票行(_btblInvoiceLines)的新訂單(InvNum),它僅創建基本信息。MSSQL INNER JOIN WHERE子句

DECLARE @gid varchar(50) SELECT @gid = newid() 

INSERT INTO InvNum (DocType,DocState,AccountID,ucIDSOrdTempInvID) 
SELECT 4,1,AccountID,@gid 
FROM (SELECT DISTINCT AccountID 
     FROM InvNum 
     WHERE ubIDSOrdConsolOrder = '1' 
     AND DocState = '1' 
     AND DocType <> '5') A 


INSERT INTO _btblInvoiceLines (iInvoiceID, iStockCodeID, fQuantity) 
SELECT AutoIndex, iStockCodeID, qty 
FROM (SELECT AutoIndex, iStockCodeID, qty 
     FROM (SELECT AutoIndex,AccountId,ucIDSOrdTempInvID 
      FROM InvNum 
      WHERE ucIDSOrdTempInvID = @gid) T1 
     INNER JOIN (SELECT B.iStockCodeID,A.AccountID,sum(B.fQuantity) AS qty 
        FROM (SELECT * 
         FROM InvNum 
         WHERE ubIDSOrdConsolOrder = '1' 
         AND DocState = '1' 
         AND DocType <> '5') A  
        INNER JOIN (SELECT * 
           FROM _btblInvoiceLines) B ON A.AutoIndex = B.iInvoiceID 
        GROUP BY iStockCodeID, AccountID) T2 ON T1.AccountId = T2.AccountID) T3 

之後,InvNum列全部更新,這工作正常。我的問題是與以下,這是更新新秩序的_btblInvoiceLines和新線與舊訂單的,那它匹配:WHERE ubIDSOrdConsolOrder = '1' AND DocState = '1' AND DocType <> '5'

這FROM子句是什麼,是不正確的:

SELECT D1.* 
FROM (SELECT A.* 
     FROM _btblInvoiceLines A 
     INNER JOIN (SELECT max(idInvoiceLines) as idInvoiceLines, iStockCodeID 
        FROM _btblInvoiceLines 
        GROUP BY iStockCodeID) B ON A.idInvoiceLines = B.idInvoiceLines) D1 
     INNER JOIN (SELECT * 
        FROM _btblInvoiceLines I1 
        INNER JOIN (SELECT accountid,autoindex,ucIDSOrdTempInvID 
           FROM InvNum 
           WHERE ucIDSOrdTempInvID = @gid) I2 ON I1.iInvoiceID = I2.AutoIndex) D2 ON D1.iStockCodeID = D2.iStockCodeID 
     WHERE _btblInvoiceLines.idInvoiceLines = D2.idInvoiceLines 

我正在迷失如何製作D1。*從最後添加到新訂單D2中的原始_btblInvoiceLines中提取信息。我相信我可以做到這一點的唯一方法是使用以下SELECT DISTINCT AccountID,ubIDSOrdConsolOrder FROM InvNum WHERE ubIDSOrdConsolOrder = '1' AND DocState = '1' AND DocType <> '5',但我對如何正確使用這種方法感到茫然。對不起,如果這是一個簡單的問題,但我一直在尋找並嘗試解決這個問題2天,現在沒有任何運氣。

謝謝。

+2

您可以使用inbetween語句和選項卡中的一些新行來設置代碼格式嗎?我認爲這會增加你獲得更高分的機會。 – artm 2014-09-24 23:41:05

+0

謝謝artm,會放棄它。 對不起,第一次提問 – doobie 2014-09-24 23:42:31

+0

您在使用哪種SQL的供應商? – 2014-09-25 02:04:07

回答

1

我的INNER JOIN錯誤順序。我做了以下,現在可以正常工作:

SELECT D1.* 
FROM (SELECT DISTINCT AccountID, AutoIndex FROM InvNum WHERE ubIDSOrdConsolOrder = '1' AND DocState = '1' AND DocType <> '5') A1 

    INNER JOIN (SELECT * FROM _btblInvoiceLines) D1 ON A1.AutoIndex = D1.iInvoiceID---- 

    INNER JOIN (SELECT max(idInvoiceLines) as idInvoiceLines, iStockCodeID FROM _btblInvoiceLines GROUP BY iStockCodeID) I1 ON D1.iStockCodeID = I1.iStockCodeID 

    INNER JOIN (SELECT * FROM _btblInvoiceLines I1 INNER JOIN (select accountid,autoindex,ucIDSOrdTempInvID FROM InvNum where ucIDSOrdTempInvID = @gid) I2 ON I1.iInvoiceID=I2.AutoIndex) D2 ---- @gid 
ON D1.iStockCodeID=D2.iStockCodeID 

WHERE _btblInvoiceLines.idInvoiceLines = D2.idInvoiceLines