Sql server 获得;无效列";尝试在查询中使用列别名时
我正在尝试使用在查询中创建的列别名,在同一查询中的公式中为不同的列创建别名。我在这里做错了什么?我该如何修复它?下面是更好地解释我自己的代码:Sql server 获得;无效列";尝试在查询中使用列别名时,sql-server,Sql Server,我正在尝试使用在查询中创建的列别名,在同一查询中的公式中为不同的列创建别名。我在这里做错了什么?我该如何修复它?下面是更好地解释我自己的代码: SELECT TestTabI.Month, TestTabI.Year, AccessEntityList.Region, AccessEntityList.[Audit Tier], AccessEntityList.[Parent Group], case when AccessEntityList.[Jurisdiction]='U.S.'
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税前收入]作为[税前总收入]”给了我一个错误:
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'.
我通常在列名中不使用空格,因此不熟悉此括号语法。您确定它适用于别名声明吗 对于别名,请尝试用反勾号替换括号,以便:
end AS `US Pretax Income`,
我通常在列名中不使用空格,因此不熟悉此括号语法。您确定它适用于别名声明吗 对于别名,请尝试用反勾号替换括号,以便:
end AS `US Pretax Income`,
如果将case语句置于交叉应用中,则可以使用别名
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
如果将case语句置于交叉应用中,则可以使用别名
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
您不能在同一个
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
您不能在同一个
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
这是一个丑陋的查询,格式和名称再糟糕不过了!供参考,所有这些工作:
选择1作为一个;选择1作为“一”;选择1作为[一个!];选择1作为“一个!”代码>我会检查你的列名拼写,以及它们是否在你认为它们在的表中。这是一个难看的查询,格式和名称再糟糕不过了!供参考,所有这些工作:选择1作为一个;选择1作为“一”;选择1作为[一个!];选择1作为“一个!”代码>我会检查您的列名拼写,以及它们是否在您认为它们在的表中。在SQL Server(问题标记的内容)中,您将得到消息102,级别15,状态1,第1行“`”附近的错误语法。如果您尝试使用建议的反勾号。在SQL Server(问题标记的内容)中,您将得到消息102,级别15,状态1,第1行“`”附近的语法不正确。如果你尝试使用你推荐的反勾号。或者如果你想用复杂的方式,你可以将你的两个case语句复制到求和别名中:)-但是我会使用拉马克·赛多尔的方法如果你想用复杂的方式,你可以将你的两个case语句复制到求和别名中:)-但是我会使用拉马克说的方法