2016-10-26 4 views
2
SELECT 
    o.OrderID, ProductName, OrderDate, ItemPrice, TaxAmount, 
    DiscountAmount, DiscountAmount - ItemPrice AS FinalTotal, 
    Quantity, ShipDate,FinalTotal * Quantity AS ItemTotal 
FROM 
    Orders AS o 
JOIN 
    OrderItems AS oi ON o.OrderID = oi.OrderID 
JOIN 
    Products AS p ON oi.ProductID = p.ProductID; 

Вот мой код, он продолжает указывать недопустимое имя столбца 'FinalTotal'. Что я здесь делаю неправильно?Недопустимое название столбца 'FinalTotal'

+3

'FinalTotal * Quantity' ->' (DiscountAmount - ItemPrice) * Quantity' – artm

ответ

2

Вы не можете ссылаться на производный значение в пределах того же самого запроса

Попробуйте

SELECT o.OrderID 
, ProductName 
, OrderDate 
, ItemPrice 
, TaxAmount 
, DiscountAmount 
,DiscountAmount - ItemPrice AS FinalTotal 
, Quantity 
, ShipDate 
,(DiscountAmount - ItemPrice) * Quantity AS ItemTotal 
FROM Orders AS o JOIN OrderItems AS oi 
    ON o.OrderID = oi.OrderID 
JOIN Products AS p 
    ON oi.ProductID = p.ProductID; 
5

вы не можете использовать псевдоним столбца на том же уровне запроса, как это.

использовать полное выражение FinalToal в расчете ItemTotal

SELECT o.OrderID, ProductName, OrderDate, ItemPrice, TaxAmount, DiscountAmount, 
     DiscountAmount - ItemPrice AS FinalTotal, 
     Quantity, ShipDate, 
     (DiscountAmount - ItemPrice) * Quantity AS ItemTotal 
FROM Orders AS o JOIN OrderItems AS oi 
    ON o.OrderID = oi.OrderID 
JOIN Products AS p 
    ON oi.ProductID = p.ProductID; 

альтернативно является использование производного запроса или CTE

+0

Спасибо, я попробую это сейчас. – LindaS

+0

он работал tyvm! – LindaS

0

Просто, потому что Там нет столбца называется FinalTotal в таблице, это вычислен один

использовать следующие вместо ...

 SELECT o.OrderID, ProductName, OrderDate, ItemPrice, TaxAmount, DiscountAmount, 
     DiscountAmount - ItemPrice AS FinalTotal, 
     Quantity, ShipDate, 
     (DiscountAmount - ItemPrice) * Quantity AS ItemTotal 
FROM Orders AS o JOIN OrderItems AS oi 
    ON o.OrderID = oi.OrderID 
JOIN Products AS p ON oi.ProductID = p.ProductID; 
3

Один трюк для этого в SQL Server является использование apply:

SELECT o.OrderID, ProductName, OrderDate, ItemPrice, TaxAmount, 
     DiscountAmount, x.FinalTotal, Quantity, ShipDate, 
     x.FinalTotal * Quantity AS ItemTotal 
FROM Orders o JOIN 
    OrderItems AS oi 
    ON o.OrderID = oi.OrderID JOIN 
    Products AS p 
    ON oi.ProductID = p.ProductID CROSS APPLY 
    (SELECT (DiscountAmount - ItemPrice) as FinalTotal) x