Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SQL Server SQL查询转换为MySQL_Mysql_Sql_Sql Server - Fatal编程技术网

将SQL Server SQL查询转换为MySQL

将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

下面是我要转换为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
,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