Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带CASE的SQL连接条件_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

带CASE的SQL连接条件

带CASE的SQL连接条件,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个查询,我正在使用它将多个列连接到一个列,但是我得到了“临近学年的错误语法”。有什么想法吗?我不太确定如何在join中结束这个案例 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.SIS

我有一个查询,我正在使用它将多个列连接到一个列,但是我得到了“临近学年的错误语法”。有什么想法吗?我不太确定如何在join中结束这个案例

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   

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 

这是您的查询,基本上是:

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) 
                       );
您的
案例
没有
else
子句。因此,当条件满足时,任何不满足条件的内容都将为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
是一个字符串。

您没有
结束
case
表达式。您应该提供示例数据和所需结果。