表Dept(用来存储部门结构信息,其中parantid字段的值是1代表没有父级部门了)
字段 deptd,parantid,deptname
1 2 开发组
2 3 北京开发部
3 1 研发序列
4 1 总经理办公室
5 6 销售部
6 1 营销序列 这个表中的数据代表:
开发组-北京开发部-开发序列
销售部-营销序列表user(用来存储用户信息)
字段 userid,deptid,username
a 1 张三
b 4 李四
c 5 王五
d 6 马六
用sql得到用户a的部门id是1:
select deptid from user where userid='a'
用sql得到用户a的父级部门id是2
select parantid from dept where deptid=1
用sql得到用户a的父级的父级部门id是3
select parantid from dept where deptid=2用sql得到parantid=1代表3就是用户a的顶级部门
select parantid from dept where deptid=3
最终想得到所有用户所在部门的整个部门结构,例如:
用户名 部门结构
张三 开发组-北京开发部-开发序列
李四 总经理办公室
王五 销售部-营销序列
马六 营销序列
字段 deptd,parantid,deptname
1 2 开发组
2 3 北京开发部
3 1 研发序列
4 1 总经理办公室
5 6 销售部
6 1 营销序列 这个表中的数据代表:
开发组-北京开发部-开发序列
销售部-营销序列表user(用来存储用户信息)
字段 userid,deptid,username
a 1 张三
b 4 李四
c 5 王五
d 6 马六
用sql得到用户a的部门id是1:
select deptid from user where userid='a'
用sql得到用户a的父级部门id是2
select parantid from dept where deptid=1
用sql得到用户a的父级的父级部门id是3
select parantid from dept where deptid=2用sql得到parantid=1代表3就是用户a的顶级部门
select parantid from dept where deptid=3
最终想得到所有用户所在部门的整个部门结构,例如:
用户名 部门结构
张三 开发组-北京开发部-开发序列
李四 总经理办公室
王五 销售部-营销序列
马六 营销序列
解决方案 »
- SQL 查询的问题
- 关于sql2005专业版的sql代理问题,谢谢!
- windows 2003 SQL server发布web service的怎么处理啊?
- 创建数据表
- 求救
- MS SQL Server 2000 的触发器里面可以执行跨数据库查询吗?
- 如何写这样的sql语句?
- 如何将一个jpg文件的内容变成sql server 数据库中image 类型数据字段的内容?
- 各位大虾:怎样使用一个SQL SERVER存储过程的嵌套调用?
- sql 查询
- 查找到记录,怎么返回二进制字段的第10到20字节数据!
- 真心求高手来帮我补充一下这个SQL语句,往下不会写了,真的需要高手,版主来看看吧。需求很BT。关于自动生成SQL语句的
GO-->生成表Deptif object_id('Dept') is not null
drop table Dept
Go
Create table Dept(deptd smallint,parantid smallint,deptname nvarchar(6))
Insert into Dept
Select 1,2,N'开发组'
Union all Select 2,3,N'北京开发部'
Union all Select 3,1,N'研发序列'
Union all Select 4,1,N'总经理办公室'
Union all Select 5,6,N'销售部'
Union all Select 6,1,N'营销序列'
-->生成表userif object_id('user') is not null
drop table [user]
Go
Create table [user]([userid] nvarchar(1),[deptid] smallint,[username] nvarchar(2))
Insert into [user]
Select N'a',1,N'张三'
Union all Select N'b',4,N'李四'
Union all Select N'c',5,N'王五'
Union all Select N'd',6,N'马六'Go;WITH t AS (
SELECT
deptd
,parantid
,CAST(deptname AS NVARCHAR(400)) AS deptname
,1 AS row
FROM Dept
WHERE parantid=1
UNION ALL
SELECT
a.deptd
,a.parantid
,CAST(a.deptname+'-'+t.deptname AS NVARCHAR(400)) AS deptname
,row+1
FROM Dept AS a
INNER JOIN t ON a.parantid=t.deptd
WHERE a.parantid<>1
)SELECT
a.[username] AS [用户名]
,t.deptname AS [部门结构]
FROM [user] AS a
INNER JOIN t ON a.deptid=t.deptd
ORDER BY a.userid
/*
用户名 部门结构
---- --------------------------------
张三 开发组-北京开发部-研发序列
李四 总经理办公室
王五 销售部-营销序列
马六 营销序列*/