簡體   English   中英

如何在SQL查詢中使用計算列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM