[英]Convert SQL Server SQL query to MySQL
以下是我想轉換為MySQL的SQL Server查詢:
SELECT SaleDetail.cTaxiNo, Category.cCarName, qryDriverExpenses.nAmount,
Sale.nInvoiceNo, Sale.cCustomerName, IIf([cPackageType] ='GENERAL',
[nProviderRate],[nProviderRate]/[nProviderKM]) AS nARate, SaleDetail.nKM,
SaleDetail.nAmount, Sale.dInvoiceDate, qryFuel.nAmount,
SaleDetail.nProviderKM, SaleDetail.nProviderRate
FROM qryFuel
RIGHT JOIN (((Sale INNER JOIN SaleDetail ON Sale.nSalePk = SaleDetail.nSalePk)
INNER JOIN (CarMaster
INNER JOIN Category
ON CarMaster.nCategoryPk = Category.nCategoryPK) ON SaleDetail.cTaxiNo =
CarMaster.cCarNo)
LEFT JOIN qryDriverExpenses
ON SaleDetail.nTourBookingpk = qryDriverExpenses.nTourBookingPK)
ON qryFuel.nTourBookingPK =
SaleDetail.nTourBookingpk
ORDER BY Sale.nInvoiceNo, Sale.dInvoiceDate;
我收到錯誤sql
語法錯誤。 在[cPackageType]附近
請幫忙!
SQL Server
IIf
在MySQL
是If
SELECT SaleDetail.cTaxiNo, Category.cCarName, qryDriverExpenses.nAmount,
Sale.nInvoiceNo, Sale.cCustomerName,
IF(cPackageType ='GENERAL', nProviderRate, nProviderRate/nProviderKM) AS nARate,
SaleDetail.nKM, SaleDetail.nAmount, Sale.dInvoiceDate, qryFuel.nAmount,
SaleDetail.nProviderKM, SaleDetail.nProviderRate
FROM qryFuel RIGHT JOIN
(((Sale INNER JOIN SaleDetail ON Sale.nSalePk =
SaleDetail.nSalePk) INNER JOIN (CarMaster INNER JOIN Category ON
CarMaster.nCategoryPk = Category.nCategoryPK) ON SaleDetail.cTaxiNo =
CarMaster.cCarNo) LEFT JOIN qryDriverExpenses ON SaleDetail.nTourBookingpk
= qryDriverExpenses.nTourBookingPK)
ON qryFuel.nTourBookingPK = SaleDetail.nTourBookingpk
ORDER BY Sale.nInvoiceNo, Sale.dInvoiceDate;
使用這些聯接只是在麻煩。 請研究正確的連接語法, https://technet.microsoft.com/zh-cn/library/ms191517%28v=sql.105%29.aspx 。 這是格式化查詢:
SELECT SaleDetail.cTaxiNo
,Category.cCarName
,qryDriverExpenses.nAmount
,Sale.nInvoiceNo
,Sale.cCustomerName
,CASE WHEN `cPackageType` ='GENERAL' THEN
`nProviderRate`
ELSE
`nProviderRate`/`nProviderKM`
END AS nARate
,SaleDetail.nKM
,SaleDetail.nAmount
,Sale.dInvoiceDate
,qryFuel.nAmount
,SaleDetail.nProviderKM
,SaleDetail.nProviderRate
FROM qryFuel
INNER JOIN SaleDetail
ON qryFuel.nTourBookingPK = SaleDetail.nTourBookingpk
RIGHT OUTER JOIN Sale
ON Sale.nSalePk = SaleDetail.nSalePk
INNER JOIN CarMaster
ON SaleDetail.cTaxiNo = CarMaster.cCarNo
INNER JOIN Category
ON CarMaster.nCategoryPk = Category.nCategoryPK
LEFT OUTER JOIN qryDriverExpenses
ON SaleDetail.nTourBookingpk = qryDriverExpenses.nTourBookingPK
ORDER BY Sale.nInvoiceNo, Sale.dInvoiceDate;
SELECT SaleDetail.cTaxiNo, Cate;ry.cCarName, qryDriverExpenses.nAmount,
Sale.nInvoiceNo, Sale.cCustomerName, If(`cPackageType` ='GENERAL',
`nProviderRate`,`nProviderRate`/`nProviderKM`) AS nARate, SaleDetail.nKM,
SaleDetail.nAmount, Sale.dInvoiceDate, qryFuel.nAmount,
SaleDetail.nProviderKM, SaleDetail.nProviderRate
FROM qryFuel RIGHT JOIN (((Sale INNER JOIN SaleDetail ON Sale.nSalePk =
SaleDetail.nSalePk) INNER JOIN (CarMaster INNER JOIN Cate;ry ON
CarMaster.nCate;ryPk = Cate;ry.nCate;ryPK) ON SaleDetail.cTaxiNo =
CarMaster.cCarNo) LEFT JOIN qryDriverExpenses ON SaleDetail.nTourBookingpk
= qryDriverExpenses.nTourBookingPK) ON qryFuel.nTourBookingPK =
SaleDetail.nTourBookingpk
ORDER BY Sale.nInvoiceNo, Sale.dInvoiceDate;
用引號括住的列名應用記號括起來,而不是方括號。
嘗試這個。 MySQL使用IF而不是IIF,並且也不像方括號一樣:
SELECT SaleDetail.cTaxiNo, Category.cCarName, qryDriverExpenses.nAmount,
Sale.nInvoiceNo, Sale.cCustomerName, If(cPackageType ='GENERAL',
nProviderRate,nProviderRate/nProviderKM) AS nARate, SaleDetail.nKM,
SaleDetail.nAmount, Sale.dInvoiceDate, qryFuel.nAmount,
SaleDetail.nProviderKM, SaleDetail.nProviderRate
FROM qryFuel RIGHT JOIN (((Sale INNER JOIN SaleDetail ON Sale.nSalePk =
SaleDetail.nSalePk) INNER JOIN (CarMaster INNER JOIN Category ON
CarMaster.nCategoryPk = Category.nCategoryPK) ON SaleDetail.cTaxiNo =
CarMaster.cCarNo) LEFT JOIN qryDriverExpenses ON SaleDetail.nTourBookingpk
= qryDriverExpenses.nTourBookingPK) ON qryFuel.nTourBookingPK =
SaleDetail.nTourBookingpk
ORDER BY Sale.nInvoiceNo, Sale.dInvoiceDate;
IIF在MySQL中無效
更改
IIf([cPackageType] ='GENERAL',
[nProviderRate],[nProviderRate]/[nProviderKM]) AS nARate
至
if [cPackageType] = 'GENERAL' then nProviderRate
else nProviderRate/nProviderKM
end as nARate
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.