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