[英]How to use Joins in IIF() function and how to use select statement inside nested IIF () in MSAccess query?
我知道人們不能在Ms訪問查詢中使用大小寫表達式。 相反,必須使用IIF()函數。 我有一個MS SQL查詢,需要將其轉換為先前存在的舊Legacy應用程序之一的Ms訪問查詢。 我知道IIF()函數的一般語法; 但是,我有兩個表相互連接的復雜的case表達式。 你們任何人都可以幫我嗎?
CASE
WHEN ISNULL(tblDetail.ProductDiscPct,0)<>0 THEN 'MFG'
WHEN EXISTS (
SELECT 1 FROM ORDER_Shipment os
JOIN [ORDER_Items] oi
ON os.OrderId = oi.orderid
AND oi.MaterialId = tblDetail.MaterialID
AND ISNULL(oi.ItemStatusId,0)=0
AND oi.OrderItemTypeId = 300
AND [tblDetail].[Quantity] = [oi].[Qty]
WHERE CAST(tblInvoice.ARInvID AS varchar) = os.InvNumber
)
THEN 'SPECIAL'
ELSE ''
END AS LnNote
這是MS SQL查詢,我需要將其轉換為以下嘗試的MS-access查詢,但沒有給出任何結果,相反,它刪除了訪問報告中字段的控件源的下拉選項。
IIf(IsNull(qryDetail.ProductDiscountPct <> 0, "MFG", "" )) AS LnNote
這只是我一直在努力工作的案例陳述的第一行。 qryDetail
只是我的主查詢中的一個子查詢。
IIF
返回用於ms-access
的BOOLEAN
,因此請檢查ISNULL
是否為true,然后將其設置為0或本身。 然后檢查與0比較的值,並返回MFG或“”。
IIF(IIF(IsNull(qryDetail.ProductDiscountPct),0,qryDetail.ProductDiscountPct) <> 0,"MFG","") AS LnNote
IIF(Nz(tblDetail.ProductDiscPct,0) <> 0, "MFG",
IIF((SELECT COUNT(*) FROM ORDER_Shipment os
JOIN [ORDER_Items] oi
ON os.OrderId = oi.orderid
AND oi.MaterialId = tblDetail.MaterialID
AND ISNULL(oi.ItemStatusId,0)=0
AND oi.OrderItemTypeId = 300
AND [tblDetail].[Quantity] = [oi].[Qty]
WHERE CAST(tblInvoice.ARInvID AS varchar) = os.InvNumber) > 0, "SPECIAL", "")
) AS LnNote
這是對SQL的粗略翻譯。 此外,它使用COUNT(*)
代替EXISTS
。 我假設在該區域中不會有太多記錄,以使查詢變慢。
Nz
與ISNULL
相似。
這有幫助嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.