[英]How to work with calculated columns in SQL Query
我不知道這個問題的標題是否明白,但是我的意思是這個。
我有一張銷售表,我需要對表進行“格式化”,並在查詢中添加一些列以指示總數,變更率(我從另一張表中取出)和以其他貨幣計的總金額。
所以我的查詢看起來像:
SELECT SalesID,SalesType,SalesDate,CurrencyType,
case when CurrencyType = 1 then Total else 0 AS TotalOnLocalCurrency,
case when CurrencyType = 2 then Total else 0 AS TotalOnOtherCurrency,
(TotalOnLocalCurrency/dbo.GetCurrencyRate(SalesDate)) + TotalOnOtherCurrency) Total
FROM Sales
如果可能出現這種情況,我是說我嘗試執行此操作,但出現此錯誤:
無效的列名“ TotalOnLocalCurrency”。
您可以將整個公式放在后面的行中,或為此使用CROSS APPPLY
:
SELECT SalesID,
SalesType,
SalesDate,
CurrencyType,
TotalOnLocalCurrency,
TotalOnOtherCurrency,
(TotalOnLocalCurrency/dbo.GetCurrencyRate(SalesDate)) + TotalOnOtherCurrency Total
FROM Sales
CROSS APPLY (SELECT CASE WHEN CurrencyType = 1 then Total else 0) CxA(TotalOnLocalCurrency)
CROSS APPLY (SELECT case when CurrencyType = 2 then Total else 0) CxB(TotalOnOtherCurrency)
您收到此錯誤是因為您已對表達式CurrencyType = 1 then Total else 0 AS TotalOnLocalCurrency
別名, CurrencyType = 1 then Total else 0 AS TotalOnLocalCurrency
對別名別名CurrencyType = 1 then Total else 0 AS TotalOnLocalCurrency
。 您不能在同一select子句中引用別名列名稱,這違反了邏輯查詢處理規則。 相反,可以引用表達式本身,也可以將表達式包裝在表表達式中,然后查詢表表達式。
您不能使用在同一查詢中引入的列別名。 如果您使用的是SQL Server 2005及更高版本,則可以使用CTE(公用表表達式)來處理。
;WITH SalesData AS
(
SELECT
SalesID, SalesType, SalesDate, CurrencyType,
TotalOnLocalCurrency = CASE WHEN CurrencyType = 1 THEN Total ELSE 0 END,
TotalOnOtherCurrency = CASE WHEN CurrencyType = 2 THEN Total ELSE END
FROM Sales
)
SELECT
SalesID, SalesType, SalesDate, CurrencyType,
TotalOnLocalCurrency, TotalOnOtherCurrency,
Total = (TotalOnLocalCurrency/dbo.GetCurrencyRate(SalesDate)) + TotalOnOtherCurrency)
FROM
SalesData
嘗試更多類似的方法:
select
SalesID,SalesType,SalesDate,CurrencyType,
TotalOnLocalCurrency,TotalOnOtherCurrency,
TotalOnLocalCurrency/dbo.GetCurrencyRate(SalesDate)) + TotalOnOtherCurrency as total from
(
SELECT SalesID,SalesType,SalesDate,CurrencyType,
case when CurrencyType = 1 then Total else 0 END AS TotalOnLocalCurrency,
case when CurrencyType = 2 then Total else 0 END AS TotalOnOtherCurrency
FROM Sales) t
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.