2017-03-01 20 views
0

複数の列を1つの列に結合するために使用するクエリがありますが、「Academic Yearの近くに不正な構文があります」というメッセージが表示されます。任意の考え - 私が参加CASEを使用したSQL結合条件

select distinct 
    bb.pk1 as 'LearnSourceKey', 
    sc.pk1 as 'SISSourceKey', 
    row_number() over (partition by bb.pk1 order by sc.SISCourseKey) as 'RowRank' 
from 
    Source.SISCourse sc 
    left join source.SISTerm st on sc.TermSourceKey=st.SISTermKey 
    inner join Source.COURSE_MAIN bb 
     on bb.batch_uid = substring(CatalogNumber, 1, (len(CatalogNumber) - 1)) + 
      case 
       when st.TermDescription='Semester 1' 
       then 'SEM-1' + '_' + st.AcademicYear 
+5

あなたは 'case'式を'終了 'しませんでした。 –

+0

サンプルデータと望ましい結果を提供する必要があります。 –

答えて

0

Caseステートメントが終了式

select distinct 
    bb.pk1 as 'LearnSourceKey', 
    sc.pk1 as 'SISSourceKey', 
    row_number() over (partition by bb.pk1 order by sc.SISCourseKey) as 'RowRank' 
from 
Source.SISCourse sc 
left join source.SISTerm st on sc.TermSourceKey=st.SISTermKey 
inner join Source.COURSE_MAIN bb 
     on bb.batch_uid = substring(CatalogNumber, 1, (len(CatalogNumber) - 1)) + 
     case 
      when st.TermDescription='Semester 1' 
      then 'SEM-1' + '_' + st.AcademicYear 
     end 
1

これは基本的に、あなたのクエリである必要があります以内の場合に終了するかどうかはあまりわからない:

select distinct bb.pk1 as LearnSourceKey, 
     sc.pk1 as SISSourceKey, 
     row_number() over (partition by bb.pk1 order by sc.SISCourseKey) as RowRank 
from Source.SISCourse sc left join 
    source.SISTerm st 
    on sc.TermSourceKey = st.SISTermKey inner join 
    Source.COURSE_MAIN bb 
    on bb.batch_uid = (left(CatalogNumber, len(CatalogNumber) - 1) + 
         (case when st.TermDescription = 'Semester 1' then 'SEM-1' + '_' + st.AcademicYear end) 
         ); 

caseにはelse句がありません。したがって、whenの条件を満たさないものはNULLとなります。 (元のクエリと同じように)

select distinct bb.pk1 as LearnSourceKey, 
     sc.pk1 as SISSourceKey, 
     row_number() over (partition by bb.pk1 order by sc.SISCourseKey) as RowRank 
from Source.SISCourse sc left join 
    source.SISTerm st 
    on sc.TermSourceKey = st.SISTermKey inner join 
    Source.COURSE_MAIN bb 
    on st.TermDescription = 'Semester 1' and 
     bb.batch_uid = (left(CatalogNumber, len(CatalogNumber) - 1) + 
         st.AcademicYear 
         ); 

このst.AcademicYearは、文字列である前提としています。これは、あなたがそれを簡略化することができます。