简体   繁体   English

无效的列名“ ProposalTypeID”

[英]Invalid column name 'ProposalTypeID'

Can you please advise me, what am I doing wrong in this stored procedure, it keeps complaining about "ProposalTypeID". 您能告诉我,在此存储过程中我在做什么错,它一直在抱怨“ ProposalTypeID”。 Here is my code: 这是我的代码:

 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  

From what I can see in your query, you can't reference proposaltypeid in your CASE statement. 根据我在查询中看到的内容,您不能在CASE语句中引用proposaltypeid

The table tblassessment is not in the FROM part of the top level SELECT statement. tblassessment不在顶级SELECT语句的FROM部分中。

Althought you could have a proposaltypeid in your other tables as well, but I assume that in your case this is the cause for the issue. 虽然您也可以在其他表中有一个proposaltypeid ,但是我认为这是造成此问题的原因。

You're going to need a LEFT JOIN (to be sure) at the end, right before your last WHERE clause. 最后,在最后一个WHERE子句之前,您将需要一个LEFT JOIN (可以肯定)。

I'd change the query to the below code (will generate a messy result set) and then tune it from there (I'm not sure if you have a corresponding column for assessmentid in your other tables (which are in the top level SELECT ). 我想查询更改为下面的代码(会产生混乱的结果集),然后从那里调它(我不知道,如果你有一个相应的列assessmentid在其他表(这是在顶级SELECT )。

If you do, then change the ON condition for the LEFT JOIN to 如果这样做,则将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 

It's quite a generic answer, based on the available information, but I think it will put you on the right track. 根据可用的信息,这是一个很笼统的答案,但我认为它将使您走上正确的道路。

Update: 更新:

I believe this query will give you what you're looking for: 我相信此查询将为您提供所需的信息:

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