0

クエリで作成した列エイリアスを、別の列の同じクエリの式内で使用しようとしています。ここで何が間違っていますか?どうすれば修正できますか? ここで自分自身をよりよく説明するためのコード:

SELECT TestTabI.Month, TestTabI.Year, AccessEntityList.Region, 
AccessEntityList.[Audit Tier], AccessEntityList.[Parent Group],
case 
when AccessEntityList.[Jurisdiction]='U.S.' 
then [NF PTI] 
else 0 
end AS [US Pretax Income], 

case 
when AccessEntityList.[Jurisdiction]='Non-U.S.' 
then [NF PTI] 
else 0 
end AS [FN Pretax Income],

[US Pretax Income]+[FN Pretax Income] AS [Total Pretax Income] FROM AccessEntityList
INNER JOIN TestTabI ON AccessEntityList.[Entity Number] = 
TestTabI.[Entity Number] WHERE (((TestTabI.Month)=12) AND ((TestTabI.Year)=2010)

" [US 税引前収入]+[FN 税引前収入] AS [税引前総収入] " でエラーが表示されます。

Msg 207, Level 16, State 1, Line 7
Invalid column name 'US Pretax Income'.
Msg 207, Level 16, State 1, Line 7
Invalid column name 'FN Pretax Income'.
4

3 に答える 3

2

SELECT同じで定義したエイリアスを使用することはできませんSELECT。これには CTE または派生テーブルを使用します。

SELECT A.*, [US Pretax Income]+[FN Pretax Income] AS [Total Pretax Income] 
FROM (
SELECT  TestTabI.Month, TestTabI.Year, AccessEntityList.Region, 
        AccessEntityList.[Audit Tier], AccessEntityList.[Parent Group],
        case when AccessEntityList.[Jurisdiction]='U.S.' then [NF PTI] 
        else 0 end AS [US Pretax Income], 
        case when AccessEntityList.[Jurisdiction]='Non-U.S.' 
        then [NF PTI] else 0 end AS [FN Pretax Income]
FROM AccessEntityList
INNER JOIN TestTabI 
ON AccessEntityList.[Entity Number] = TestTabI.[Entity Number]
WHERE (((TestTabI.Month)=12) AND ((TestTabI.Year)=2010)) A
于 2012-05-17T17:25:15.493 に答える
2

case ステートメントを入れるとcross apply、エイリアスを使用できます。

select TestTabI.Month,
       TestTabI.Year,
       AccessEntityList.Region, 
       AccessEntityList.[Audit Tier], 
       AccessEntityList.[Parent Group],
       C.[US Pretax Income], 
       C.[FN Pretax Income],
       C.[US Pretax Income]+C.[FN Pretax Income] AS [Total Pretax Income] 
from AccessEntityList
  inner join TestTabI 
    on AccessEntityList.[Entity Number] = TestTabI.[Entity Number] 
  cross apply
    (
     select case 
              when AccessEntityList.[Jurisdiction]='U.S.' 
              then [NF PTI] 
              else 0 
            end as [US Pretax Income], 
            case 
              when AccessEntityList.[Jurisdiction]='Non-U.S.' 
              then [NF PTI] 
              else 0 
            end as [FN Pretax Income]
    ) as C
where TestTabI.Month=12 and TestTabI.Year=2010
于 2012-05-17T17:23:57.573 に答える
0

私は通常、列名にスペースを使用しないため、この角かっこ構文に慣れていません。エイリアス宣言で機能しますか?

エイリアスの場合は、角かっこをバッククォートに置き換えてみてください。

end AS `US Pretax Income`, 
于 2012-05-17T17:17:44.363 に答える