簡體   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