❶ 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資料庫上下級關系的資料庫表改怎麼設置
通過添加外鍵來進行約束
創建完數據表的時候把下面的約束加上即可