2014-10-13 5 views
0

제발,이 저장 프로 시저에서 내가 뭘 잘못하고 있는지, 제발 "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 

답변

2

, 당신이 당신의 CASE 성명에서 proposaltypeid을 참조 할 수 없습니다 : 여기 내 코드입니다.

tblassessment은 최상위 레벨 SELECTFROM 부분에 없습니다.

다른 테이블에도 proposaltypeid이있을 수 있지만 귀하의 경우이 문제의 원인이라고 생각합니다.

마지막 WHERE 절 바로 앞에 LEFT JOIN (반드시)이 있어야합니다.

나는 아래의 코드로 쿼리를 변경하고 (지저분한 결과 집합을 생성 할 것입니다.) 그리고 거기에서 조정합니다. (다른 테이블에있는 assessmentid에 해당하는 열이 있는지 확실하지 않습니다. 당신이 할 경우 최상위 레벨 SELECT).

는 다음의 ON 조건을 변경 LEFT JOIN

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 

그것은 년대 AV에 따라 매우 일반적인 대답은, 쓸모없는 정보이지만, 나는 그것이 당신을 올바른 길로 인도 할 것이라고 생각합니다.

업데이트 :이 질문은 당신이 찾고있는 무엇을 줄 것으로 예상

:

내가 AssessmentID 통해 Assesmentversion 테이블을 참조 할 필요
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 
+0

, 그 문제가 지금입니다. – Usher

+0

나는 모두 AssessmentVerionID을 알고 있지만 "Assessment"테이블에는 assessmentverionID 컬럼이 없습니다.하지만 AssessmentVersion 테이블에는 평가 ID가 있습니다. 내가 – Usher

+0

을 연결하는 쿼리를 사용하여 생각하는 이유입니다. 지금 시도하십시오. – Usher