2张表,主从表A主表:
[FID] [FName]
001 王五
002 刘能
003 张飞B从表:
[FID] [FParentID] [科目]
1 001 数学
2 001 英语
3 001 物理
4 002 化学我想得到结果:
001 王五 数学/英语/物理
002 刘能 化学
003 张飞 空
[FID] [FName]
001 王五
002 刘能
003 张飞B从表:
[FID] [FParentID] [科目]
1 001 数学
2 001 英语
3 001 物理
4 002 化学我想得到结果:
001 王五 数学/英语/物理
002 刘能 化学
003 张飞 空
解决方案 »
- [请教]更换了路由器 无法连接上数据库了
- 如何使用t-sql语言判定一个表是否已经创建?某个表中的某个字段是否允许为空?某一指定字段的数据类型是什么?
- 求一个SQL 语句
- 如何写这样的语句
- 用户表的用户 ID 建立哪种索引为佳?
- 求2个存储过程查询语句
- 问一个安装方面的问题,为什么以前我安装时很正常,而这一次却总是无法安装成功?
- 如何让一台SQL数据库服务器同步或者定时获得另外一台服务器上的一个.MDF文件(不断更新)的内容并且储存在本机中。
- 为什么我连接局域网中的SQL Server2000??
- 请问如何给存储过程加密?我这样写为什么不行呀!
- SQLSEVER 2000如何通过SQL语句查看正在阻塞进程的阻塞时间?
- 怎样精确到30分钟?
--A主表:
IF(OBJECT_ID('TA') IS NOT NULL) DROP TABLE TA
CREATE TABLE TA(FID VARCHAR(10),FName VARCHAR(20))
INSERT INTO TA
SELECT '001','王五' UNION ALL
SELECT '002','刘能' UNION ALL
SELECT '003','张飞'
--B从表
IF(OBJECT_ID('TB') IS NOT NULL) DROP TABLE TB
CREATE TABLE TB (FID INT,[FParentID] VARCHAR(10),[科目] VARCHAR(20))
INSERT INTO TB
SELECT 1,'001','数学' UNION ALL
SELECT 2,'001','英语' UNION ALL
SELECT 3,'001','物理' UNION ALL
SELECT 4,'002','化学'
--结果
SELECT TA.FID,TA.FName,ISNULL(C.Courses,'空') AS 科目 FROM TA
LEFT JOIN (
SELECT B.FParentID,STUFF((SELECT '/'+A.科目 FROM TB AS A WHERE A.FParentID=B.FParentID FOR XML PATH(''))
,1
,1
,'') AS Courses
FROM TB AS B
GROUP BY B.FParentID)AS C ON (TA.FID=C.FParentID)
/*
FID FName 科目
---------- -------------------------------------
001 王五 数学/英语/物理
002 刘能 化学
003 张飞 空(3 行受影响)
*/
--构造测试数据
if object_id('[A]') is not null drop table [A]
go
create table [A]([FID] varchar(3),[FName] varchar(4))
insert [A]
select '001','王五' union all
select '002','刘能' union all
select '003','张飞'
go
if object_id('[B]') is not null drop table [B]
go
create table [B]([FID] int,[FParentID] varchar(3),[科目] varchar(4))
insert [B]
select 1,'001','数学' union all
select 2,'001','英语' union all
select 3,'001','物理' union all
select 4,'002','化学'
go--创建函数
create function [dbo].[F_Str](@pid int)
returns nvarchar(1000)
as
begin
declare @S nvarchar(100)
select @S=isnull(@S+'/','')+科目 from B where FParentID=@pid
return @S
end
go--查询
SELECT *,科目=dbo.f_str(fid) FROM A--查询结果
/**
FID FName 科目
---- ----- ------------------------
001 王五 数学/英语/物理
002 刘能 化学
003 张飞 NULL(3 行受影响)
**/