当前位置:首页 » 编程语言 » 单位层级数据表sql
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

单位层级数据表sql

发布时间: 2022-07-04 06:19:38

sql语句解决部门表中,已知父部门的情况下,插入部门层级列。

--建表
CreatetableT
(
BMBHvarchar(10),
SSBMVarchar(10)
)
--插入数据
insertintoTvalues('0000','')
insertintoTvalues('1000','0000')
insertintoTvalues('1100','1000')
insertintoTvalues('1101','1100')
insertintoTvalues('1102','1100')
insertintoTvalues('1103','1100')
insertintoTvalues('1200','1000')
insertintoTvalues('1201','1200')
insertintoTvalues('1202','1200')
insertintoTvalues('1203','1200')

--查询
;
WithCT
As
(
selectBMBH,SSBM,0AslvfromTwhereSSBM=''
unionall
selectT.BMBH,T.SSBM,lv+1fromCTinnerjoinTonCT.BMBH=T.SSBM
)
Select*FromCT

--效果

--如果是要更新回去的话
--添加1列lx
altertableTaddlxint

--更新层级
WithCT
As
(
selectBMBH,SSBM,0AslvfromTwhereSSBM=''
unionall
selectT.BMBH,T.SSBM,lv+1fromCTinnerjoinTonCT.BMBH=T.SSBM
)
UpdateTSetlx=lv
FromCT
WhereT.BMBH=CT.BMBH

数据库部门表有一列是表明当前组织的层级的,现在需要将这一列层级对应名称查询出来并拼接在一起。

是否要将部门层级中的各部门名称拼接显示出来?

可以实现一个函数,参数为部门层级的字符串,在该函数中对部门层级字串按字符“-”分隔,然后查询部门编码表获得各个部门的名称并拼接起来;
如果要查询速度块,可以考虑建立一个专门的部门层级表,主键为部门层级字串,另一个字段为部门层级各部门名称拼接。

❸ 如何通过SQL语句实现数据的层次汇总

这个就需要从最底成开始回圈计算了
create proc aa
as

declare @a int
set @a= distinct b from table
if (select len(b) from table where @a=b)=3
begin
select t1.b , t1.c from into #a from table t1,table t2 where substring(t1.b,1,2) =substring(t2.b,1,2) and len(t1.b)=3 and t1.b=t2.b

update set t1 set t1. c=sum( t2.c) from table t1, #a t2 where substring(t2.b,1,2) =t1.b
end

else
begin
select t1.b , t1.c from into #a from table t1,table t2 where substring(t1.b,1,1) =substring(t2.b,1,1) and len(t1.b)=3 and t1.b=t2.b

update set t1 set t1. c=sum( t2.c) from table t1, #a t2 where substring(t2.b,1,1) =t1.b
end

❹ SQL要怎么写才能把 按员工查出他所在部门所有层级关系 。


WITHB1AS(
SELECT部门名称,部门名称一级部门,''二级部门,''三级部门,''四级部门,''五级部门FROM部门表WHERE层级=0),
B2AS(
SELECTB.部门名称,B1.一级部门,B.部门名称二级部门,''三级部门,''四级部门,''五级部门FROMB1JOIN部门表BONB.上级部门ID=B1.部门名称WHEREB.层级=1),
B3AS(
SELECTB.部门名称,B2.一级部门,B2.二级部门,B.部门名称三级部门,''四级部门,''五级部门FROMB2JOIN部门表BONB.上级部门ID=B2.部门名称WHEREB.层级=2),
B4AS(
SELECTB.部门名称,B3.一级部门,B3.二级部门,B3.三级部门,B.部门名称四级部门,''五级部门FROMB3JOIN部门表BONB.上级部门ID=B3.部门名称WHEREB.层级=3),
B5AS(
SELECTB.部门名称,B4.一级部门,B4.二级部门,B4.三级部门,B4.四级部门,B.部门名称五级部门FROMB4JOIN部门表BONB.上级部门ID=B4.部门名称WHEREB.层级=4),
BAS(
SELECT*FROMB1
UNIONALL
SELECT*FROMB2
UNIONALL
SELECT*FROMB3
UNIONALL
SELECT*FROMB4
UNIONALL
SELECT*FROMB5)
SELECTID,姓名,一级部门,二级部门,三级部门,四级部门,五级部门FROMBJOIN员工表YONY.部门=B.部门名称

❺ sql如何取某个部门的所有子部门

假设表名为 tb, id=001
select * from tb where parentid=(select parentid from tb where id=001)
上面的语句只能找到下级部门,三级就找不到了。建议部门编码使用层级式的,这样就很容易了

❻ pl/sql 如何让所在部门层级显示在一列

这个没法用一个简单的SQL语句写出来。
可以先定义一个函数,能根据一个部门获取所有的上级部门,并组成字符串。
然后在SQL中调用此函数就可以实现了。

❼ 急求:SQL层级汇总的语句

CREATE TABLE table1 (
id INT,
name VARCHAR(10),
f_id INT
);
GO

INSERT INTO table1
SELECT 1 , 'a ', 0 UNION ALL
SELECT 2 , 'b ', 0 UNION ALL
SELECT 3 , 'a.1 ', 1 UNION ALL
SELECT 4 , 'a.2 ', 1 UNION ALL
SELECT 5 , 'a.1.1 ', 3 UNION ALL
SELECT 6 , 'a.1.2 ', 3 UNION ALL
SELECT 7 , 'a.2.1 ', 4 UNION ALL
SELECT 8 , 'a.2.2 ', 4 UNION ALL
SELECT 9 , 'a.1.1.1', 5 UNION ALL
SELECT 10, 'a.1.1.2', 5 UNION ALL
SELECT 11, 'a.1.2.1', 6 UNION ALL
SELECT 12, 'a.1.2.2', 6 UNION ALL
SELECT 13, 'a.2.1.1', 7 UNION ALL
SELECT 14, 'a.2.1.2', 7 UNION ALL
SELECT 15, 'a.2.2.1', 8 UNION ALL
SELECT 16, 'a.2.2.2', 8;
GO

CREATE TABLE table2 (
id INT,
t_id INT,
price DECIMAL(5,2)
);
GO

INSERT INTO table2
SELECT 1, 9 , 10.00 UNION ALL
SELECT 2, 10, 5.00 UNION ALL
SELECT 3, 11, 2.00 UNION ALL
SELECT 4, 12, 3.00 UNION ALL
SELECT 5, 13, 4.00 UNION ALL
SELECT 6, 14, 6.50 UNION ALL
SELECT 7, 15, 3.20 UNION ALL
SELECT 8, 16, 4.00
GO

WITH baseQuery
AS (
SELECT
table1.id,
table1.name,
table1.f_id,
ISNULL(table2.price, 0.00) AS price
FROM
table1 LEFT JOIN table2 ON (table1.id = table2.t_id)
), treeCTE
AS (
SELECT
id, name, f_id, price
FROM
baseQuery
WHERE
NOT EXISTS (
SELECT 1
FROM table1
WHERE table1.f_id = baseQuery.id
)
UNION ALL
SELECT
baseQuery.id,
baseQuery.name,
baseQuery.f_id,
CAST(baseQuery.price + treeCTE.price as DECIMAL(5,2))
FROM
baseQuery JOIN treeCTE ON (baseQuery.id = treeCTE.f_id)
)
select
id,
name,
SUM(price) AS price
from
treeCTE
GROUP BY
id,
name
ORDER BY
id

id name price
----------- ---------- ---------------------------------------
1 a 37.70
2 b 0.00
3 a.1 20.00
4 a.2 17.70
5 a.1.1 15.00
6 a.1.2 5.00
7 a.2.1 10.50
8 a.2.2 7.20
9 a.1.1.1 10.00
10 a.1.1.2 5.00
11 a.1.2.1 2.00
12 a.1.2.2 3.00
13 a.2.1.1 4.00
14 a.2.1.2 6.50
15 a.2.2.1 3.20
16 a.2.2.2 4.00

(16 行受影响)

❽ SQL,查询层级

1 select 员工,部门 from tablename where 员工='P3';
2 select 部门,员工 from tablename where 部门='D'

❾ SQL查询语句分层级显示数据的问题

你肯定是知道了是哪个审核人才能判断的,所以,此时审核人的grade也就知道了,
那么 比如现在是审核人3,那么他的grade就是3,那么就查他上级grade的allow
select * from 表 where Grade=当前审核人的grade-1 and allow = 1,如果有这样的记录,显示给他看,否则提示没有

❿ 请叫高手SQL数据库上下级关系的数据库表改怎么设置

通过添加外键来进行约束

创建完数据表的时候把下面的约束加上即可