2016-09-16 20 views
-1

SQL問合せがoracleにあり、SQL Serverで同じ問合せを書き換えることができません。私は左外部結合を使用することができず、組み合わせて使用​​することはできません。ある人が私を正しい方向に向けることができますか?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

にそれを書き換える

てみてください。それはOracleで動作するのですか? – 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では、使い方は自動的に2つを結合する方法です主キーのテーブル?あなたはSQLサーバーでそれを行うことはできません。結合述部には明示的に名前を付ける必要があります。 –

答えて

0

は、SQLサーバーに参加するためにUSINGを使用することはできません(たとえば、MySQLとOracleのようないくつかのDBMSが、それを実装、しかし...ではないSQL Serverのん)

サンプルコードは途中で作業クエリであることを見ていない

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

関連する問題