2015-05-19 2 views
0

Ниже приведен запрос SQL Server, я хочу, чтобы преобразовать в MySQL:Преобразование SQL SQL Server запрос к 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

Eсть no IIF в MYSQL, вместо этого используйте IF; Если ([cPackageType] = 'GENERAL', [nProviderRate], [nProviderRate]/[nProviderKM]) AS nARate, – knkarthick24

ответ

0

IIf в SQL Server является If в MySQL

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/ ан-ГБ/библиотека/hh213574.aspx. Также op пытается конвертировать из 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

Смежные вопросы