2013-09-15 3 views
1

Я пытаюсь добавить псевдоним столбца '10% 'в столбец InvoiceTotal, но он утверждает, что имя столбца '10%' не существует , если я удалю ([10 %] + InvoiceTotal) AS [Plus 10%], результаты будут иметь столбец 10%. что я делаю неправильно?SQL не удалось добавить числовой псевдоним столбца в другой столбец

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

ответ

0

Псевдоним не существует, пока запрос не будет завершен, и вы пытаетесь использовать его до этого момента.

Исправление довольно простое, хотя - просто не используйте псевдоним. :-)

SELECT 
    InvoiceTotal, 
    InvoiceTotal * .10 AS [10%], 
    InvoiceTotal + (InvoiceTotal * .10) AS [Plus 10%] 
FROM 
    Invoices  
WHERE 
    InvoiceTotal - PaymentTotal - CreditTotal > 500 
ORDER BY 
    InvoiceTotal DESC; 
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; 
Смежные вопросы