Я пытаюсь вручную перенести запрос доступа, который на самом деле является выражением (вычисляемое поле в доступе.
Выражение доступа, о котором идет речь:
Balance2: (IIf(([OutstandingBalance]-nz([PartsStockForJobTotals]!
[Expr1]))>0,([OutstandingBalance]-nz([PartsStockForJobTotals]![Expr1])),0))*
[Part Assembly Link Table]![Qty]
Пока мне удалось написать код SQL:
SELECT
IIF([Order Transactions Table].[OutstandingBalance] -
ISNULL([PartsStockForJobTotals].[EXPR1], 0) >0,
[Order Transactions Table].[OutstandingBalance] -
ISNULL([PartsStockForJobTotals].[EXPR1], 0), 0 *
[Part Assembly Link Table].[QTY]) AS Balance2,
FROM ((([PART LIBARY HEADER]
INNER JOIN [Part Assembly Link Table]
ON [PART LIBARY HEADER].PartID = [Part Assembly Link Table].PartIDParent)
INNER JOIN [PART LIBARY HEADER] AS [PART LIBARY HEADER_1]
ON [Part Assembly Link Table].PartIDChild = [PART LIBARY HEADER].PartID)
INNER JOIN [Order Transactions Table]
ON [PART LIBARY HEADER].[Part Number] = [Order Transactions Table].[Part
Number])
LEFT JOIN PartsStockForJobTotals
ON [Order Transactions Table].[Item Referance] = PartsStockForJobTotals.
[Item Referance]
Теперь все до этой точки возвращает записи. Однако я пытаюсь отфильтровать только те записи, где ' Balance2 ' больше 0.
Это предложение WHERE, которое я использую, но оно не получает строк:
WHERE
IIF([Order Transactions Table].[OutstandingBalance] -
ISNULL([PartsStockForJobTotals].[EXPR1], 0) >0,
[Order Transactions Table].[OutstandingBalance] -
ISNULL([PartsStockForJobTotals].[EXPR1], 0), 0 *
[Part Assembly Link Table].[QTY]) > 0;
Очевидно, что псевдонимы не разрешено использовать в предложениях WHERE, поэтому я просто скопировал и вставил ' Balance2 ' в оператор where и добавил его с > 0