在SQL查询MS Access中使用自定义函数
我正在使用以下查询:在SQL查询MS Access中使用自定义函数,sql,ms-access,Sql,Ms Access,我正在使用以下查询: SELECT DISTINCT Purchases.PONumber, SalesOrders.SalesOrderNumber, Bookings.VessalVoyage, Purchases.Quantity, Bookings.ShippingLine, Bookings.CargoCutoffDate, SalesOrders.Quantity AS Quant, SalesOrders.QuantityUOM AS QuantUOM, Bookings.Book
SELECT DISTINCT Purchases.PONumber, SalesOrders.SalesOrderNumber, Bookings.VessalVoyage, Purchases.Quantity, Bookings.ShippingLine, Bookings.CargoCutoffDate, SalesOrders.Quantity AS Quant, SalesOrders.QuantityUOM AS QuantUOM, Bookings.BookingNumber, Shipments.FreightRate, Purchases.VendorID, Shipments.ShipmentInvoiceNumber, Shipments.InvoicePIDate, Bookings.SailingDate, Bookings.PortOfLoading, Bookings.ArrivalDate, Containers.InspectionCharge, SalesOrders.Grade, Purchases.NumberOfContainers, TruckingRates.TruckingRate, [Purchases.NumberOfContainers]*[TruckingRates.TruckingRate] AS TruckCost, IIf(IsNull([Purchases.NumberOfContainers]*[Containers.InspectionCharge]),0,[Purchases.NumberOfContainers]*[Containers.InspectionCharge]) AS Inspt, SalesOrders.SIHUID, SalesOrders.SIHUShippingAssistant, (IIf([BuyPriceUOM]='sht',[BuyPrice],IIf([BuyPriceUOM]='kg',[BuyPrice]*907.185,IIf([BuyPriceUOM]='MT',[BuyPrice]*0.907185,IIf([BuyPriceUOM]='lbs',[BuyPrice]*2000.000574,[BuyPrice]))))/IIf(Nz([BuyPriceCurrency],"USD")="USD",1,Nz([BuyPriceExchangeRate],0))) AS Buy,Query6.Load
FROM (((((Purchases INNER JOIN Containers
ON Purchases.PONumber = Containers.PONumber)
INNER JOIN SalesOrders
ON Containers.SalesOrderNumber = SalesOrders.SalesOrderNumber)
INNER JOIN Bookings
ON Containers.BookingID = Bookings.BookingID)
INNER JOIN Shipments
ON Containers.ShipmentID = Shipments.ShipmentID)
LEFT JOIN TruckingRates
ON Containers.TruckingRateID = TruckingRates.TruckingRateID)
LEFT JOIN Query6
ON Containers.PONumber = Query6.PONumber
GROUP BY Purchases.PONumber, SalesOrders.SalesOrderNumber, Bookings.VessalVoyage, Purchases.Quantity, Bookings.ShippingLine, Bookings.CargoCutoffDate, SalesOrders.Quantity, SalesOrders.QuantityUOM, Bookings.BookingNumber, Shipments.FreightRate, Purchases.VendorID, Shipments.ShipmentInvoiceNumber, Shipments.InvoicePIDate, Bookings.SailingDate, Bookings.PortOfLoading, Bookings.ArrivalDate, Containers.InspectionCharge, SalesOrders.Grade, Purchases.NumberOfContainers, TruckingRates.TruckingRate, SalesOrders.SIHUID, SalesOrders.SIHUShippingAssistant, Containers.NetWeight, Purchases.BuyPrice, Purchases.BuyPriceCurrency, Purchases.BuyPriceUOM, Purchases.BuyPriceExchangeRate, Containers.WeightUOM, SalesOrders.UnitPrice, Containers.SalesOrderNumber, Containers.ContainerNo,Query6.Load;
在查询6中,我使用函数获取“WtInMT”:
问题6:
功能:
Public Function GetWeightInMT(WtToConvert As Double, WtInUOM As String) As Double
' MT(Metric Tons)
' Pounds(lbs) to MT: lbs / 2204.6 = MT
' Kilograms(kg) to MT: kg * .001 = MT
' Short tons(sh t) to MT: sh t * .907185 = MT.
Select Case WtInUOM
Case "lbs"
GetWeightInMT = WtToConvert / 2204.6
Case "kg"
GetWeightInMT = WtToConvert * 0.001
Case "sh t"
GetWeightInMT = WtToConvert * 0.907185
Case Else
GetWeightInMT = WtToConvert
End Select
If GetWeightInMT < 1 Then GetWeightInMT = 0
End Function
公共函数GetWeightInMT(WtToConvert为Double,WtInUOM为String)为Double
'公吨(公吨)
'磅(磅)至公吨:磅/2204.6=公吨
'千克(kg)至公吨:千克*.001=公吨
'短吨(短吨)至公吨:短吨*.907185=公吨。
选择casewtinuom
案例“lbs”
GetWeightInMT=WtToConvert/2204.6
案例“kg”
GetWeightInMT=WtToConvert*0.001
案例“SHT”
GetWeightInMT=WtToConvert*0.907185
其他情况
GetWeightInMT=WtToConvert
结束选择
如果GetWeightInMT<1,则GetWeightInMT=0
端函数
当我运行查询时,我得到数据不匹配错误
有什么建议吗??
谢谢您是否可以在任何地方传递
Null
作为重量?可能值得一试。GetWeightInMT(NZ)(Sum(…
的可能重复项)您似乎忘记了前面类似问题的答案。谢谢。我一定会尝试的
Public Function GetWeightInMT(WtToConvert As Double, WtInUOM As String) As Double
' MT(Metric Tons)
' Pounds(lbs) to MT: lbs / 2204.6 = MT
' Kilograms(kg) to MT: kg * .001 = MT
' Short tons(sh t) to MT: sh t * .907185 = MT.
Select Case WtInUOM
Case "lbs"
GetWeightInMT = WtToConvert / 2204.6
Case "kg"
GetWeightInMT = WtToConvert * 0.001
Case "sh t"
GetWeightInMT = WtToConvert * 0.907185
Case Else
GetWeightInMT = WtToConvert
End Select
If GetWeightInMT < 1 Then GetWeightInMT = 0
End Function