Sql 内部连接和部分匹配
我不确定标题是否正确,所以就这样吧 下面的脚本返回正确的结果:目前罗伊·布朗教授数学101。罗伊·布朗的教师ID是1225,但后来他们添加了前缀001——用于其他目的 我想在结果中包括的是,罗伊·布朗在某个时间点上确实有另一门课程,因为数学101 Old有1225门。它甚至不需要显示他有多少其他课程;这会让我知道Sql 内部连接和部分匹配,sql,tsql,Sql,Tsql,我不确定标题是否正确,所以就这样吧 下面的脚本返回正确的结果:目前罗伊·布朗教授数学101。罗伊·布朗的教师ID是1225,但后来他们添加了前缀001——用于其他目的 我想在结果中包括的是,罗伊·布朗在某个时间点上确实有另一门课程,因为数学101 Old有1225门。它甚至不需要显示他有多少其他课程;这会让我知道#coursessv中不止一行。但是结果应该保留为2行 我不想为Roy Brown显示一个额外的行,这就是为什么我不做注释的内部连接(即right(t.teacherid,4)=righ
#coursessv
中不止一行。但是结果应该保留为2行
我不想为Roy Brown显示一个额外的行,这就是为什么我不做注释的内部连接
(即right(t.teacherid,4)=right(c.teacherid,4)
)
这两个表之间没有关系,因为#coursessv
中的数据来自csv文件
IF OBJECT_ID('tempdb..#teacher') IS NOT NULL DROP TABLE #teacher
IF OBJECT_ID('tempdb..#coursesCsv') IS NOT NULL DROP TABLE #coursesCsv
create table #teacher
(
TeacherID varchar(10),
FullName varchar(30)
)
insert into #teacher select '001-1225', 'Roy Brown'
insert into #teacher select '001-1230', 'Woody Boyd'
create table #coursesCsv
(
CourseName varchar(30),
TeacherID varchar(10)
)
insert into #coursesCsv select 'Math 101', '001-1225'
insert into #coursesCsv select 'Math 101 Old', '002-1225'
insert into #coursesCsv select 'History 101', '001-1230'
select t.teacherid, c.coursename from
#teacher t inner join #coursesCsv c
on t.teacherid = c.teacherid
--on right(t.teacherid,4) = right(c.teacherid,4)
在派生表(或公共表表达式=WITH)中,对同一权限(teacherid,4)
的课程进行“分组计数”,并将其加入:
select t.teacherid, c.coursename, c.coursecnt
from teacher t
inner join
(
select
teacherid,
coursename,
count(*)
over (partition by right(teacherid,4)) as coursecnt
from coursesCsv
) as c
on t.teacherid = c.teacherid