SQL 多部分标识符不能在 SELECT 中绑定

SQL multi-part identifier can't be bound in SELECT

提问人:Oxagarh 提问时间:1/14/2023 最后编辑:Oxagarh 更新时间:1/17/2023 访问量:52

问:

是否可以使用其他表中的列来添加案例,而不是在“开始”部分中的第一个列?

我不能在SELECT部分使用C.codeY.anything之类的东西:

SELECT 
    fromTableA, fromTableA, fromTableA,  
    CASE   
        WHEN fromTableA = anyValue THEN 'is_ok'  
        WHEN B.fromTableB = anyValue THEN 'couldnt.be.bound'
        WHEN   fromTableB = anyValue THEN 'invalid.column.name'
    END AS X  
FROM
    (SELECT fromTableA,
     SUM(fromTableA),
     CASE WHEN A.fromTableA = 'anything' THEN 'still ok'
          WHEN C.fromTableC = 'allowed' THEN 'no problem'
     FROM tableA A
     JOIN tableB B ON A.id = B.id  
     JOIN tableC C ON C.id = B.id
     Having SUM(fromTableA) > 0
     ) AS Y

编辑:我需要的是使用外部选择中的表 B 或 C 中的列(我只是无法删除内部选择,因为我会丢失内部选择中的情况和聚合操作)。

sql-server t-sql 联接 语法错误 案例

评论

2赞 John Cappelletti 1/14/2023
为什么要进行子查询?如果没有它,您可以引用表别名。
0赞 HABO 1/15/2023
你是说该子句不能以任何方式更改,必须是子查询吗?目前尚不清楚为什么更改子句会更改行数,例如,添加到子查询中的选择列表不会向结果集添加另外三行。是否可以将子查询添加到外部语句的选择列表中?fromfromC.ShoeSize as SomethingIReallyNeedFromTheTableDesignatedByTheTableAliasCselect

答:

2赞 Stu 1/14/2023 #1

以下应该是您所需要的,此处的派生表无法完成任何操作。

select A.Cols...,  
case 
  when A.col1 = anyValue then 'is_ok'  
  when B.Col1 = anyValue then 'couldnt.be.bound'
  when B.Col2 = anyValue then 'invalid.column.name'
end as X  
from tableA A
join tableB B on A.id = B.id  
join tableC C on C.id = B.id;