SQL问题-为'sv2017'指定了'Id'列多次

问题描述 投票:1回答:1

我一直收到错误

Msg 8156,第16级,状态1,第5行为“ sv2017”多次指定了“ Id”列。

Msg 8156,第16级,状态1,第7行为“ sv2010”多次指定了“ Id”列。

使用以下脚本:

select 
    sv2017.id, sv2017.TotalArea, sv2017.uarn, 
    sv2010.id, sv2010.PlantMachineryValue, sv2017.PlantMachineryValue, 
    sv2010.uarn, sv2017.BAReferenceNumber 
from 
    (select * 
     from summaryvaluation sv 
     join SummaryValuationPlant svp on sv.id = svp.SummaryValuationId  
     where sv.yearid = 2 
       and sv.id in (select id /*Get the most recent valuation for the list year*/
                     from
                         (select 
                              id, uarn, 
                              rank() over (partition by uarn order by fromdate desc) as RankOrder 
                          from 
                              summaryvaluation 
                          where 
                              yearid = 2 and systemactive = 1) tbl
                     where 
                         rankorder = 1)) sv2017
left outer join 
    (select * 
     from summaryvaluation sv2 
     join SummaryValuationPlant svp2 on sv2.id = svp2.SummaryValuationId 
     where sv2.yearid = 1 
       and sv2.id in (select id /*Get the most recent valuation for the list year*/
                      from
                          (select 
                               id, uarn, 
                               rank() over (partition by uarn order by fromdate desc) as RankOrder 
                           from 
                               summaryvaluation 
                           where 
                               yearid = 1 and systemactive = 1) tbl
                      where 
                          rankorder = 1)) sv2010 on sv2017.uarn = sv2010.uarn
where
    isnull (sv2017.PlantMachineryValue, 0) > isnull(sv2010.PlantMachineryValue, 0)

而且我看不到我要去哪里错了!这可能很明显,我的大脑无法正常工作,但是可以得到任何帮助。

谢谢

sql-server id
1个回答
0
投票

您的问题可能在这里:

select * 
     from summaryvaluation sv 
     join SummaryValuationPlant svp 

该代码出现在2个不同的位置(具有不同的别名)。无论如何,我怀疑两个表都有一个id列,因此当您在派生表中使用此列时,SQL不知道您是从sv表还是从svp表引用那个。

要解决此问题,请删除*并仅列出将在较大查询的其他位置使用的那些列。

© www.soinside.com 2019 - 2024. All rights reserved.