假如有两个表Tstudent和Tcourse表结果分别如下
Tstudent表:id sid sname
1 001 张三
2 002 李四Tcourse表 id sid course
1 001 语文
2 002 语文
3 001 数学
4 001 英语现在我要查出每个学生所学的学科有哪些,并显示出来的结果形式如下:
学号 姓名 所学课程
001 张三 语文 数学 英语
002 李四 语文请问这样SQL语句要怎么写呢,先谢谢了!
Tstudent表:id sid sname
1 001 张三
2 002 李四Tcourse表 id sid course
1 001 语文
2 002 语文
3 001 数学
4 001 英语现在我要查出每个学生所学的学科有哪些,并显示出来的结果形式如下:
学号 姓名 所学课程
001 张三 语文 数学 英语
002 李四 语文请问这样SQL语句要怎么写呢,先谢谢了!
if object_id('[Tstudent]') is not null drop table [Tstudent]
go
create table [Tstudent]([id] int,[sid] varchar(3),[sname] varchar(4))
insert [Tstudent]
select 1,'001','张三' union all
select 2,'002','李四'
if object_id('[Tcourse]') is not null drop table [Tcourse]
go
create table [Tcourse]([id] int,[sid] varchar(3),[course] varchar(4))
insert [Tcourse]
select 1,'001','语文' union all
select 2,'002','语文' union all
select 3,'001','数学' union all
select 4,'001','英语'
---查询---
select b.sid as 学号,a.sname as 姓名,
所学课程=(select ' '+course from Tcourse where sid=b.sid for xml path(''))
from Tstudent a
join Tcourse b on a.sid=b.sid
group by b.sid,a.sname---结果---
学号 姓名 所学课程
---- ---- ----------------------------
001 张三 语文 数学 英语
002 李四 语文(2 行受影响)
--sql2000用函数
create function [dbo].[f_str](@sid varchar(20))
returns varchar(50)
as
begin
declare @s varchar(800)
select @s=isnull(@s+' ','')+course
from Tcourse
where sid=@sid
return @s
end
go-->查询
select b.sid as 学号,a.sname as 姓名,
所学课程=dbo.f_str(b.sid)
from Tstudent a
join Tcourse b on a.sid=b.sid
group by b.sid,a.sname/**
学号 姓名 所学课程
---- ---- --------------------------------------------------
001 张三 语文 数学 英语
002 李四 语文(2 行受影响)
**/
create table Tstudent(id int,sid varchar(50),sname nvarchar(50))
go
create table Tcourse(id int,sid varchar(50),course nvarchar(50))
goinsert into Tstudent
select 1, '001', N'张三' union all
select 2, '002', N'李四'insert into Tcourse
select 1, '001', N'语文' union all
select 2, '002', N'语文' union all
select 3, '001', N'数学' union all
select 4, '001', N'英语'
SELECT *
FROM(
SELECT DISTINCT
sid
FROM (select a.sid,a.sname,b.course from Tstudent a,Tcourse b
where a.sid=b.sid)T
)A
OUTER APPLY(
SELECT
[values]= STUFF(REPLACE(REPLACE(
(
SELECT course FROM (select a.sid,a.sname,b.course from Tstudent a,Tcourse b
where a.sid=b.sid) N
WHERE sid = A.sid
FOR XML AUTO
), '<N course="', ','), '"/>', ''), 1, 1, '')
)N
-----------------------------------------
001 语文,数学,英语
002 语文