Can you please advise me, what am I doing wrong in this stored procedure, it keeps complaining about "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.
The table tblassessment
is not in the FROM
part of the top level SELECT
statement.
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.
You're going to need a LEFT JOIN
(to be sure) at the end, right before your last WHERE
clause.
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
).
If you do, then change the ON condition for the LEFT JOIN
to
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.