2016-09-16 8 views
-1

SQL 쿼리가 oracle에 있고 SQL Server에서 동일한 쿼리를 다시 작성할 수 없습니다. 나는 왼쪽 외부 조인을 사용하고 조합하여 사용할 수 없습니다. 어떤 사람이 올바른 방향으로 나를 가리킬 수 있습니까? (...되지는 SQL 서버를 구현합니까 예를 들어 MySQL과 오라클과 같은 일부 DBMS를하지만)SQL Server에서 왼쪽 외부 조인을 사용하고 사용할 수 없습니다.

(select QD.FY_ST_QUESTION_DTL_TABLE_ID,qi.display_number,QI.QUESTION_NUMBER, 
           qd.question_part_number 
          from FY_ST_QUESTION_INFO qi, 
           FY_ST_QUESTION_DETAIL qd 
          where qi.region = cRegion 
          and qi.state_code = cState_Code 
          and qi.fy = nFY 
          and qi.report_id = nREPORT_ID 
          and qi.section_id = nSECTION_ID 
          and qi.subsection_id = nSUBSECTION_ID 
          and qi.display_number = nDISPLAY_NUMBER 
          and qi.QUESTION_NUMBER = nQUESTION_NUMBER 
          and (QI.REPORTER_ID = sUSER_ID or 
            QI.DELEGATE_ID = sUSER_ID or 
            QI.SUB_DELEGATE_ID = sUSER_ID) 
          and QD.FY_ST_QUESTION_INFO_TABLE_ID = QI.FY_ST_QUESTION_INFO_TABLE_ID 
         )fq left outer join 
         (select distinct FY_ST_QUESTION_DTL_TABLE_ID, AD.ROW_NUMBER 
          from UPLOAD_TEMP_DATA ad 
          where ad.region = cRegion 
          and ad.state_code = cState_Code 
          and ad.fy = nFY 
          and ad.report_id = nREPORT_ID 
          and ad.section_id = nSECTION_ID 
          and ad.subsection_id = nSUBSECTION_ID 
          and ad.display_number = nDISPLAY_NUMBER 
          and ad.QUESTION_NUMBER = nQUESTION_NUMBER 
          and ad.QUESTION_PART_NUMBER = nQUESTION_PART_NUMBER 
         )aq 
        using(FY_ST_QUESTION_DTL_TABLE_ID) 
       WHERE ROW_NUMBER IS NOT NULL 
      order by question_number,question_part_number,row_number ; 
+1

이 쿼리 나에게 잘못된 것으로 재 작성; 오라클에서 제대로 작동합니까? – Aleksej

+1

ANSI-92 스타일 조인을 사용하는 습관을 갖춰야합니다. 그들은 거의 30 년 동안 주변에있었습니다. http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx –

+0

IIRC, 사용하는 것은 자동으로 두 개를 조인하는 방법입니다. 기본 키 테이블? 당신은 SQL 서버에서 그렇게 할 수 없습니다. 조인 술어의 이름을 명시 적으로 지정해야합니다. –

답변

0

당신은 SQL Server의 조인 USING을 사용할 수 없습니다

여기에 오라클 내 쿼리

이 방법에 의해 작업 쿼리로 보이지 않는

ON QD.FY_ST_QUESTION_DTL_TABLE_ID = aq.FY_ST_QUESTION_DTL_TABLE_ID 

샘플 코드를 교체하십시오 )fq 정말 이상한 것 같다. 쿼리의 첫 번째 부분에는 별칭이 필요하지 않으며 별칭도 지정할 수 없습니다.

마지막으로 모든 조인 후에 기본 쿼리의 where 절을 배치해야합니다.

봅니다

select 
     QD.FY_ST_QUESTION_DTL_TABLE_ID,qi.display_number,QI.QUESTION_NUMBER, 
     qd.question_part_number 
    from FY_ST_QUESTION_INFO qi 
    join FY_ST_QUESTION_DETAIL qd on QD.FY_ST_QUESTION_INFO_TABLE_ID = QI.FY_ST_QUESTION_INFO_TABLE_ID 
    left outer join 
     (select 
      distinct FY_ST_QUESTION_DTL_TABLE_ID, 
      AD.ROW_NUMBER 
     from UPLOAD_TEMP_DATA ad 
     where 
      ad.region = cRegion 
      and ad.state_code = cState_Code 
      and ad.fy = nFY 
      and ad.report_id = nREPORT_ID 
      and ad.section_id = nSECTION_ID 
      and ad.subsection_id = nSUBSECTION_ID 
      and ad.display_number = nDISPLAY_NUMBER 
      and ad.QUESTION_NUMBER = nQUESTION_NUMBER 
      and ad.QUESTION_PART_NUMBER = nQUESTION_PART_NUMBER 
     )aq 
      ON QD.FY_ST_QUESTION_DTL_TABLE_ID = aq.FY_ST_QUESTION_DTL_TABLE_ID 

     WHERE ROW_NUMBER IS NOT NULL 
     and qi.region = cRegion 
     and qi.state_code = cState_Code 
     and qi.fy = nFY 
     and qi.report_id = nREPORT_ID 
     and qi.section_id = nSECTION_ID 
     and qi.subsection_id = nSUBSECTION_ID 
     and qi.display_number = nDISPLAY_NUMBER 
     and qi.QUESTION_NUMBER = nQUESTION_NUMBER 
     and (QI.REPORTER_ID = sUSER_ID or 
      QI.DELEGATE_ID = sUSER_ID or 
      QI.SUB_DELEGATE_ID = sUSER_ID) 
     order by question_number,question_part_number,row_number ; 

Actual code: 

CREATE PROCEDURE [HSIP].[PROJECTLIST_RPT1](

@cRegion CHAR(2) = '00', 
@cState_Code CHAR(2) = '00', 
@nFY NUMERIC(4,0) = 0, 
@nREPORT_ID NUMERIC(2,0) = 0, 
@nSECTION_ID NUMERIC(2,0) = 0, 
@nSUBSECTION_ID NUMERIC(2,0) = 0, 
@nQUESTION_NUMBER NUMERIC(38,0) = 0, 
@nDISPLAY_NUMBER NUMERIC(38,0) = 0, 
@nQUESTION_PART_NUMBER NUMERIC(38,0) = 0, 
@sUSER_ID VARCHAR(25) = NULL, 
@nFY_ST_QUESTION_DTL_TABLE_ID NUMERIC(38,0) = 0, 
[email protected]_num integer ) 
@nROW_NUMBER NUMERIC(38,0) = 0) 


--coloffset integer := 17; 

AS 
BEGIN 

SET NOCOUNT ON; 

--declare @setval as varchar 

declare @coloffset as integer = 17 

select @nrow_number, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),1) as ProjectName, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),2) as ImprovementCategory, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),3) as SubCategory, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),4) as ProjectOutputs, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),5) as OutputType, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),6) as HsipProjectCost, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),7) as TotalProjectCost, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),8) as FundingCategory, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),9) as FunctionalClassification, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),10) as FunctionalClassificationOther, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),11) as Asdt, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),12) as Speed, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),13) as Ownership, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),14) as OwnershipOther, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),15) as RelevantShspEmphasisArea, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),16) as RelevantShspEmphasisAreaOther, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0),17) as RelevantShspStrategy, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+1) as ErrProjectName, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+2) as ErrImprovementCategory, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+3) as ErrSubCategory, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+4) as ErrProjectOutputs, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+5) as ErrOutputType, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+6) as ErrHsipProjectCost, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+7) as ErrTotalProjectCost, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+8) as ErrFundingCategory, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+9) as ErrFunctionalClassification, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+10) as ErrFunctionalClassificationOth, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+11) as ErrAsdt, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+12) as ErrSpeed, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+13) as ErrOwnership, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+14) as ErrOwnershipOther, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+15) as ErrRelevantShspEmphasisarea, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+16) as ErrRelevantShspEmphasisareaOth, 

hsip.getTempResponseData(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+17) as ErrRelevantShspStrategy, 

hsip.getErrorCount(@nFY_ST_QUESTION_DTL_TABLE_ID, ISNULL(@nROW_NUMBER, 0), @coloffset+17) as ValidationErrorCount, 

@nFY_ST_QUESTION_DTL_TABLE_ID, @nDISPLAY_NUMBER, @nQUESTION_NUMBER, @nQUESTION_PART_NUMBER 

from 
(select QD.FY_ST_QUESTION_DTL_TABLE_ID,qi.display_number,QI.QUESTION_NUMBER, 
           qd.question_part_number 
          from FY_ST_QUESTION_INFO qi, 
           FY_ST_QUESTION_DETAIL qd 
          where qi.region = @cRegion 
          and qi.state_code = @cState_Code 
          and qi.fy = @nFY 
          and qi.report_id = @nREPORT_ID 
          and qi.section_id = @nSECTION_ID 
          and qi.subsection_id = @nSUBSECTION_ID 
          and qi.display_number = @nDISPLAY_NUMBER 
          and qi.QUESTION_NUMBER = @nQUESTION_NUMBER 
          and (QI.REPORTER_ID = @sUSER_ID or 
            QI.DELEGATE_ID = @sUSER_ID or 
            QI.SUB_DELEGATE_ID = @sUSER_ID) 
          and QI.FY_ST_QUESTION_INFO_TABLE_ID = QD.FY_ST_QUESTION_INFO_TABLE_ID 
         )as fq left outer join 
         (select distinct ad.FY_ST_QUESTION_DTL_TABLE_ID, AD.ROW_NUMBER 
          from UPLOAD_TEMP_DATA ad 
          where ad.region = @cRegion 
          and ad.state_code = @cState_Code 
          and ad.fy = @nFY 
          and ad.report_id = @nREPORT_ID 
          and ad.section_id = @nSECTION_ID 
          and ad.subsection_id = @nSUBSECTION_ID 
          and ad.display_number = @nDISPLAY_NUMBER 
          and ad.QUESTION_NUMBER = @nQUESTION_NUMBER 
          and ad.QUESTION_PART_NUMBER = @nQUESTION_PART_NUMBER 
         ) as aq 
+0

@ Raphael : 나만의 방식으로 시도했다 : 오류로 가기 : 다중 파트 식별자 "QD.FY_ST_QUESTION_DTL_TABLE_ID"를 바인딩 할 수 없습니다. – user3147594

+0

@ user3147594 방금 편집 했습니까? –

+0

이제이 오류가 발생했습니다. TOP, OFFSET 또는 FOR XML을 지정하지 않으면 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블 식에서 ORDER BY 절이 잘못되었습니다. – user3147594

관련 문제