[英]Invalid column name 'FinalTotal'
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'。 我在这做错了什么?
您不能在相同的查询级别上使用列别名。
在ItemTotal的计算中使用FinalToal的完整表达式
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
在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
您无法在同一查询中引用派生值
尝试
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;
简单地说,因为表中没有名为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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.