查询结果一对多显示???

ALEX_1111 2018-07-12 10:50:12
表1:
学号 姓名
01 张三
02 李四
03 王五
04 张三
05 王五


表2:
学号 科目
01 语文
01 数学
02 英语
03 物理
03 数学
02 化学
02 语文
02 历史
01 地理
03 语文
05 数学
05 历史
04 物理

想要实现的查询结果如下:

学号 姓名 科目
01 张三 语文
null null 数学
null null 地理
02 李四 英语
null null 化学
null null 语文
null null 历史
03 王五 物理
null null 数学
null null 语文
04 张三 物理
05 王五 数学
null null 历史

能不能有最简单的SQL一次性查询出来???












...全文
144 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2018-07-12
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T1') is null
drop table #T1
Go
Create table #T1([学号] nvarchar(22),[姓名] nvarchar(22))
Insert #T1
select N'01',N'张三' union all
select N'02',N'李四' union all
select N'03',N'王五' union all
select N'04',N'张三' union all
select N'05',N'王五'
GO
if not object_id(N'Tempdb..#T2') is null
drop table #T2
Go
Create table #T2([学号] nvarchar(22),[科目] nvarchar(22))
Insert #T2
select N'01',N'语文' union all
select N'01',N'数学' union all
select N'02',N'英语' union all
select N'03',N'物理' union all
select N'03',N'数学' union all
select N'02',N'化学' union all
select N'02',N'语文' union all
select N'02',N'历史' union all
select N'01',N'地理' union all
select N'03',N'语文' union all
select N'05',N'数学' union all
select N'05',N'历史' union all
select N'04',N'物理'
Go
--测试数据结束
SELECT CASE
WHEN rn = 1 THEN
学号
ELSE
NULL
END AS 学号,
CASE
WHEN rn = 1 THEN
姓名
ELSE
NULL
END AS 姓名,
科目
FROM
(
SELECT #T1.*,
科目,
ROW_NUMBER() OVER (PARTITION BY #T1.学号 ORDER BY #T1.学号) rn
FROM #T2
JOIN #T1
ON #T1.学号 = #T2.学号
) t



丰云 2018-07-12
  • 打赏
  • 举报
回复

with tb as (select b.id, a.name, b.subject from tb1 a, tb2 b where a.id = b.id)
select id = case when t1.subject = t2.subject then t1.id else null end
name = case when t1.subject = t2.subject then t1.name else null end
t1.subject
from tb t1, tb t2 where t1.id = t2.id

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧