[英]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.