2015-05-19 131 views
0

下面是SQL Server查询我想转换到MySQL:转换的SQL Server SQL查询到MySQL

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]

请帮助!

+1

有在MYSQL中没有IIF,而是用IF来代替;如果([cPackageType] ='GENERAL', [nProviderRate],[nProviderRate]/[nProviderKM])AS nARate, – knkarthick24

回答

0

SQL ServerIIfIfMySQL

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; 
+0

非常感谢您的支持 – Surajghosi

0

使用类别的这些连接是自找麻烦。请研究正确的加入语法,https://technet.microsoft.com/en-us/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; 
+2

实际上TSQL + SQL Server确实使用IIF https://msdn.microsoft.com/ EN-GB /库/ hh213574.aspx。此外,操作是试图从SQL Server转换到MySQL –

+0

啊,我一直忘记他们在2012年添加它。谢谢! – TTeeple

+0

由于方括号,查询仍然会抛出相同的错误。 –

0
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; 

引用的列名应该由蜱包围,而不是方括号。

0

试试这个。 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; 
0

IIF是无效的MySQL中

变化

IIf([cPackageType] ='GENERAL', 
     [nProviderRate],[nProviderRate]/[nProviderKM]) AS nARate 

if [cPackageType] = 'GENERAL' then nProviderRate 
else nProviderRate/nProviderKM 
end as nARate 
+0

感谢millen - 进行了更正 – mson