Следующий SQL Query находит заказы, соответствующие определенным требованиям, а затем создает новый порядок (InvNum) со строками счетов (_btblInvoiceLines) на данном этапе, он создал только базовую информацию.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'
Это ЕК является то, что неверно:
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. * Вытащить информацию из последней оригинальной _btblInvoiceLines, которая была добавлена в новые заказы, D2. Единственный способ, которым я считаю, что я могу это сделать, - использовать следующий SELECT DISTINCT AccountID,ubIDSOrdConsolOrder FROM InvNum WHERE ubIDSOrdConsolOrder = '1' AND DocState = '1' AND DocType <> '5'
, но я не могу понять, как правильно это сделать. Извините, если это простой вопрос, но я искал и пытался решить эту проблему в течение 2 дней без везения.
спасибо.
Можете ли вы отформатировать код с помощью нескольких новых строк между операторами и вкладками? Я думаю, это увеличит ваш шанс получить айсберга. – artm
Поблагодарите artm, отпустите его. К сожалению, первый раз задавая вопрос – doobie
Какой поставщик SQL вы используете? –