1

我正在尝试将列别名“10%”添加到 InvoiceTotal 列,但它指出如果我删除 ([10%] + InvoiceTotal) AS [Plus 10%],则列名“10%”不存在,结果将有 10% 的列。我究竟做错了什么?

SELECT InvoiceTotal, (InvoiceTotal * .10) AS [10%], ([10%] + InvoiceTotal) AS [Plus 10%]
FROM Invoices    
WHERE InvoiceTotal - PaymentTotal - CreditTotal > 500
ORDER BY InvoiceTotal DESC;
4

2 回答 2

0

在查询完成之前,别名不存在,并且您正在尝试在此之前使用它。

不过,修复很简单——只是不要使用别名。:-)

SELECT 
  InvoiceTotal, 
  InvoiceTotal * .10 AS [10%], 
  InvoiceTotal + (InvoiceTotal * .10) AS [Plus 10%]
FROM 
  Invoices    
WHERE 
  InvoiceTotal - PaymentTotal - CreditTotal > 500
ORDER BY 
  InvoiceTotal DESC;
于 2013-09-15T04:51:39.513 回答
0

解决方案#1:

SELECT src.*, src.[10%], (src.[10%] + src.InvoiceTotal) AS [Plus 10%]
FROM
(
    SELECT InvoiceTotal, (InvoiceTotal * .10) AS [10%]
    FROM Invoices    
    WHERE InvoiceTotal - PaymentTotal - CreditTotal > 500
) src
ORDER BY src.InvoiceTotal DESC;

解决方案#2:

;WITH BaseQuery
AS
(
    SELECT InvoiceTotal, (InvoiceTotal * .10) AS [10%]
    FROM Invoices    
    WHERE InvoiceTotal - PaymentTotal - CreditTotal > 500
)
SELECT src.*, src.[10%], (src.[10%] + src.InvoiceTotal) AS [Plus 10%]
FROM BaseQuery src
ORDER BY src.InvoiceTotal DESC;

解决方案#3:

SELECT i.InvoiceTotal, x.[10%], (x.[10%] + i.InvoiceTotal) AS [Plus 10%]
FROM Invoices i   
CROSS APPLY ( SELECT (i.InvoiceTotal * .10) AS [10%] ) x
WHERE i.InvoiceTotal - i.PaymentTotal - i.CreditTotal > 500
ORDER BY i.InvoiceTotal DESC;
于 2013-09-15T04:53:11.933 回答