我正在尝试对列进行一些计算,并使用“低”和“高”之间的位置来过滤结果。为了获得最终结果,我在select语句中使用了变量,当我使用从上一次计算得出的最终值并将其与where子句一起使用时,它附带了0个结果。请参考以下我的sql代码:-
SELECT autorates.Buy AS 'Buy', Carrier.FuelLevy,
@FuelLevyTotal := ((autorates.Buy * Carrier.FuelLevy) + autorates.Buy) AS 'withFuelLevyTotal',
@FuelLevyGSTTotal := ((@FuelLevyTotal * 0.10) + @FuelLevyTotal) AS 'withGSTrate',
@MarginTotal := ((Margin.Margin * @FuelLevyGSTTotal) + @FuelLevyGSTTotal) AS 'Sell', // Final Results after all calculations
Margin.Low, Margin.High, autorates.OriginType, autorates.DestinationType, autorates.GoodsAllowed, Carrier.Disabled
FROM Margin, autorates
LEFT JOIN Carrier on Carrier.ID = autorates.Carrier
WHERE autorates.Car='4WD/Van' AND autorates.Origin = 'Melbourne' AND autorates.Destination = 'Sydney'
AND Carrier.Disabled = 0 AND
autorates.GoodsAllowed = 0 AND
@MarginTotal BETWEEN Margin.Low and Margin.High //Here is the problem
GROUP BY autorates.OriginType , autorates.DestinationType
ORDER by @MarginTotal
以下屏幕截图是我在运行时得到的结果,这是错误的:
获得卖出的公式是:
下面的屏幕快照是Fuellevy(即0.1604)
答案 0 :(得分:1)
我建议使用存储的proc而不是单个查询。上面的查询将不起作用。 MarginTotal是在查询中定义的变量,不能在where语句中使用。可以使用内部查询,但是有点复杂。