2012-01-24 7 views
1

이 질문의 제목을 이해할 수 있는지는 알 수 없지만 이것이 의미하는 바입니다.SQL 쿼리에서 계산 된 열을 사용하는 방법

나는 판매 테이블을 가지고 있으며, 테이블에 "추가"테이블을 추가하여 전체 통화, 변경 비율 (다른 테이블을 구성한 것) 및 다른 통화로 표시된 총 금액을 나타내는 열을 추가해야합니다.

Invalid column name 'TotalOnLocalCurrency'.

+0

* 시간 * = 시간 관련, 예를 과거의 어떤 주어진 시간에 대한 사실을 재구성 할 수 있습니다. 종종 데이터에'ValidFrom/ValidTo' 열을 넣음으로써 얻을 수 있습니다. 주소가 5 년 전에 보였습니다 ... –

+0

TotalOnLocalCurrency/dbo.GetCurrencyRate (SalesDate)에 대해 잘못 입력하지 않았습니까? 어쩌면 TotalOnLocalCurrency.dbo.GetCurrencyRate (SalesDate)? – heximal

+0

.dbo.GetCurrencyRate (SalesDate)는이 질문에 유감스럽게도 – jcvegan

답변

2

당신은에서 전체 식을 넣을 수 있습니다 :이 경우 가능하면, 내가이 일을 시도하지만이 오류가 발생했습니다 의미

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 

: 같은

그래서 내 쿼리가 보인다 이후 선, 또는 이것에 대한 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) 
+0

통화 비율을 얻는 함수이지만 CxA 및 CxB는 무엇을 의미합니까? – jcvegan

+0

이들은 교차 적용 하위 쿼리의 별칭 일뿐입니다. 원하는 것은 무엇이든 넣을 수 있습니다. 그러나 저는 그것들을'CrossApplyA'와'CrossApplyB'를 의미하기 위해 사용합니다. – JNK

+0

그건 꽤 똑똑한 트릭입니다. 나는 당신을 더 좋아합니다! –

1

을 becau 당신은 표현 CurrencyType = 1 then Total else 0 AS TotalOnLocalCurrency의 앨리어싱을했습니다. 동일한 select 절에서 별칭 열 이름을 참조 할 수 없으며 이는 논리적 쿼리 처리 규칙을 위반합니다. 대신 표현식 자체를 참조하거나 표 표현식의 표현식을 감싸고 표 표현식에 대해 조회하십시오.

0

동일한 쿼리 내에서 소개하는 열 별칭을 사용할 수 없습니다. SQL Server 2005 이상을 사용하고 있다면 CTE (Common Table Expression)를 사용하여이 문제를 해결할 것입니다.

;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 
0

더 같은 것을 시도해보십시오

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 
관련 문제