将SQL Server SQL查询转换为MySQL
下面是我要转换为MySQL的SQL Server查询:将SQL Server SQL查询转换为MySQL,mysql,sql,sql-server,Mysql,Sql,Sql Server,下面是我要转换为MySQL的SQL Server查询: SELECT SaleDetail.cTaxiNo, Category.cCarName, qryDriverExpenses.nAmount, Sale.nInvoiceNo, Sale.cCustomerName, IIf([cPackageType] ='GENERAL', [nProviderRate],[nProviderRate]/[nProviderKM]) AS nARate, SaleDeta
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
,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;
引用的列名应该用记号而不是方括号括起来。试试这个。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
到
MYSQL中没有IIF,请改用IF;如果[cPackageType]='GENERAL',[nProviderRate],[nProviderRate]/[nProviderKM]作为nARate,那么实际上TSQL+SQL Server使用IIF。此外,op正在尝试从SQL Server转换为MySQLAh,我一直忘记他们在2012年添加了它。谢谢由于方括号的原因,查询仍然会抛出相同的错误。
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([cPackageType] ='GENERAL',
[nProviderRate],[nProviderRate]/[nProviderKM]) AS nARate
if [cPackageType] = 'GENERAL' then nProviderRate
else nProviderRate/nProviderKM
end as nARate