2012-05-17 6 views
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) 

"[США Доналоговая прибыль] + [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'. 
+0

Это один запрос UGLY, форматирование и имена не могут ухудшиться! FYI, все эти работы: 'выберите 1 как один; выберите 1 как «один!»; выберите 1 как [один!]; выберите 1 как «один!»; «Я проверил бы ваши имена имен столбцов и что они находятся в таблицах, которые, по вашему мнению, есть. –

ответ

0

Я обычно использую нет пробелы в именах столбцов, поэтому я не знаком с этим синтаксисом. Вы уверены, что это работает для объявления псевдонима?

Для ваших псевдонимов попробуйте заменить скобки с обратными кавычками так:

end AS `US Pretax Income`, 
+1

в SQL Server (в чем помечен вопрос), вы получите ** Msg 102, Level 15, State 1, Line 1 Неправильный синтаксис рядом с ''. **, если вы попытаетесь использовать обратный тик, как вы рекомендуете. –

1

Если вы положили ваши заявления дела в 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 
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 
+0

Или если вы хотите сделать это извилистым способом, вы можете скопировать ваши два оператора case в суммированный псевдоним :) - но я бы использовал метод Lamak – Charleh

Смежные вопросы