繁体   English   中英

无效的列名“ ProposalTypeID”

[英]Invalid column name 'ProposalTypeID'

您能告诉我,在此存储过程中我在做什么错,它一直在抱怨“ ProposalTypeID”。 这是我的代码:

 SELECT assessmentecosystemcreditid,
       assessmentversionid,
       dbo.tblassessmentecosystemcredit.managementzoneid,
       (SELECT proposaltypeid
        FROM   tblassessment
        WHERE  assessmentid = (SELECT assessmentid
                               FROM   tblassessmentversion
                               WHERE  assessmentversionid =
               dbo.tblassessmentecosystemcredit.assessmentversionid)) AS
       ProposalTypeID,
       CASE
         WHEN sitevaluecurrentscore <= 17
              AND ( dbo.tblvegetationzone.eecid > 0 )
              AND ( proposaltypeid = 699 ) THEN 0
         ELSE numberofcredits
       END                                                            AS
       NumberOfCreditst
FROM   dbo.tblassessmentecosystemcredit
       INNER JOIN dbo.tblvegetationtype
               ON dbo.tblassessmentecosystemcredit.vegtypeid =
                  dbo.tblvegetationtype.vegtypeid
       INNER JOIN dbo.tblmanagementzone
               ON dbo.tblassessmentecosystemcredit.managementzoneid =
                  dbo.tblmanagementzone.managementzoneid
       INNER JOIN dbo.tblvegetationzone
               ON dbo.tblvegetationzone.vegetationzoneid =
                  dbo.tblmanagementzone.vegetationzoneid
WHERE  dbo.tblassessmentecosystemcredit.assessmentversionid =
       @AssessmentVersionID  

根据我在查询中看到的内容,您不能在CASE语句中引用proposaltypeid

tblassessment不在顶级SELECT语句的FROM部分中。

虽然您也可以在其他表中有一个proposaltypeid ,但是我认为这是造成此问题的原因。

最后,在最后一个WHERE子句之前,您将需要一个LEFT JOIN (可以肯定)。

我想查询更改为下面的代码(会产生混乱的结果集),然后从那里调它(我不知道,如果你有一个相应的列assessmentid在其他表(这是在顶级SELECT )。

如果这样做,则将LEFT JOIN的ON条件更改为

TBA.assessmentid = "referencedTable"."correspondingColumn"

SELECT assessmentecosystemcreditid,
       assessmentversionid,
       dbo.tblassessmentecosystemcredit.managementzoneid,
       (SELECT proposaltypeid
        FROM   tblassessment
        WHERE  assessmentid = (SELECT assessmentid
                               FROM   tblassessmentversion
                               WHERE  assessmentversionid =
            dbo.tblassessmentecosystemcredit.assessmentversionid)) AS ProposalTypeID,
       CASE
         WHEN sitevaluecurrentscore <= 17
              AND ( dbo.tblvegetationzone.eecid > 0 )
              AND ( proposaltypeid = 699 ) THEN 0
         ELSE numberofcredits
       END AS NumberOfCreditst
FROM   dbo.tblassessmentecosystemcredit
       INNER JOIN dbo.tblvegetationtype
               ON dbo.tblassessmentecosystemcredit.vegtypeid =
                  dbo.tblvegetationtype.vegtypeid
       INNER JOIN dbo.tblmanagementzone
               ON dbo.tblassessmentecosystemcredit.managementzoneid =
                  dbo.tblmanagementzone.managementzoneid
       INNER JOIN dbo.tblvegetationzone
               ON dbo.tblvegetationzone.vegetationzoneid =
                  dbo.tblmanagementzone.vegetationzoneid
       LEFT JOIN tblassessment TBA ON 1 = 1
WHERE  dbo.tblassessmentecosystemcredit.assessmentversionid =
       @AssessmentVersionID 

根据可用的信息,这是一个很笼统的答案,但我认为它将使您走上正确的道路。

更新:

我相信此查询将为您提供所需的信息:

SELECT assessmentecosystemcreditid,
       assessmentversionid,
       dbo.tblassessmentecosystemcredit.managementzoneid,
       (SELECT proposaltypeid
        FROM   tblassessment
        WHERE  assessmentid = (SELECT assessmentid
                               FROM   tblassessmentversion
                               WHERE  assessmentversionid =
            dbo.tblassessmentecosystemcredit.assessmentversionid)) AS ProposalTypeID,
       CASE
         WHEN sitevaluecurrentscore <= 17
              AND ( dbo.tblvegetationzone.eecid > 0 )
              AND ( proposaltypeid = 699 ) THEN 0
         ELSE numberofcredits
       END AS NumberOfCreditst
FROM   dbo.tblassessmentecosystemcredit
       INNER JOIN dbo.tblvegetationtype
               ON dbo.tblassessmentecosystemcredit.vegtypeid =
                  dbo.tblvegetationtype.vegtypeid
       INNER JOIN dbo.tblmanagementzone
               ON dbo.tblassessmentecosystemcredit.managementzoneid =
                  dbo.tblmanagementzone.managementzoneid
       INNER JOIN dbo.tblvegetationzone
               ON dbo.tblvegetationzone.vegetationzoneid =
                  dbo.tblmanagementzone.vegetationzoneid

       -- added/modified below JOINs
       INNER JOIN dbo.Assesmentversion AV ON 
         AV.assessmentversionid = dbo.tblassessmentecosystemcredit.assessmentversionid
       INNER JOIN tblassessment TBA ON 
         TBA.AssessmentID = AV.AssessmentID 
WHERE  dbo.tblassessmentecosystemcredit.assessmentversionid =
       @AssessmentVersionID 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM