Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 获得;无效列";尝试在查询中使用列别名时_Sql Server - Fatal编程技术网

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语句复制到求和别名中:)-但是我会使用拉马克说的方法