SQL Server嵌套JOIN内部表列无法绑定如何输出到查询结果
错误原因
- 别名作用域限制:表别名
DD的生效范围仅覆盖它所在的内层子查询,你外层关联的子查询最终别名为DT,且该子查询的SELECT列表未返回Detail、Value两个字段,外层查询自然无法绑定这两个字段。 - 语法不规范:原代码存在多处语法问题:SELECT列表中部分字段后缺失逗号、聚合列末尾多了冗余逗号、使用聚合函数
MAX时未搭配GROUP BY对非聚合字段分组。
修正方案
推荐直接拆分嵌套关联,简化查询结构避免作用域问题,修正后的代码如下:
SELECT S.Status, DT.scheduledstartdate, DT.actualstartdate, DT.scheduledenddate, MAX(CASE DD.Detail WHEN 'Note' THEN DD.Value END) Notes, MAX(CASE DD.Detail WHEN 'Late' THEN DD.[Value] END) Reason FROM dbo.View_RptMod S JOIN [dbo].[View_Phase] P ON P.Studyd = S.Studyd JOIN [dbo].[View_Prop] VP ON VP.[Studyd] = S.Studyd JOIN [dbo].[DataInfo] DT ON DT.PhaseRowId = P.phaserowid JOIN dbo.DataDetail DD ON DD.RowId = DT.RowId WHERE DT.scheduledstartdate IS NOT NULL GROUP BY S.Status, DT.scheduledstartdate, DT.actualstartdate, DT.scheduledenddate
如果你必须保留原有的嵌套子查询结构,只需要在子查询的SELECT列表中补充DD.Detail、DD.Value两个字段,外层查询时用DT.Detail、DT.Value引用即可,同时记得补充GROUP BY逻辑。
内容的提问来源于stack exchange,提问作者Krasnips
相关产品推荐
相关产品推荐

