表1:部門表(parentid為父ID,多級聯)
ID 部門 父ID
1 A公司
2 A部 1
3 B部 1
4 1A部 2
5 A部2 2
6 B部1 3
7 A部11 4
表2:職工表
部門 姓名
A部 李A
A部 王B
1A部 V
1A部 D
A部2 E
B部 E1
A部11 K1
B部 Q
B部 S
要求:得到A部與B部(parentid=1)下的總人數
部門 人數
A部 6
B部 3
uj5u.com熱心網友回復:
A部6人怎么來的,是不是包含1A部這些資料。uj5u.com熱心網友回復:

A部是6人,需包含A部下的所有人。
uj5u.com熱心網友回復:
CREATE TABLE #部門表(id int,部門 VARCHAR(10),父ID int)
CREATE TABLE #職工表(部門 VARCHAR(10),姓名 VARCHAR(10))
INSERT INTO #部門表 VALUES(1, 'A公司',null)
INSERT INTO #部門表 VALUES(2, 'A部', 1)
INSERT INTO #部門表 VALUES(3, 'B部', 1)
INSERT INTO #部門表 VALUES(4, '1A部', 2)
INSERT INTO #部門表 VALUES(5, 'A部2', 2)
INSERT INTO #部門表 VALUES(6, 'B部1', 3)
INSERT INTO #部門表 VALUES(7, 'A部11', 4)
INSERT INTO #職工表 VALUES('A部', '李A')
INSERT INTO #職工表 VALUES('A部', '王B')
INSERT INTO #職工表 VALUES('1A部', 'V')
INSERT INTO #職工表 VALUES('1A部', 'D')
INSERT INTO #職工表 VALUES('A部2', 'E')
INSERT INTO #職工表 VALUES('B部', 'E1')
INSERT INTO #職工表 VALUES('A部11', 'K1')
INSERT INTO #職工表 VALUES('B部', 'Q')
INSERT INTO #職工表 VALUES('B部', 'S')
;
WITH ct
AS
(
SELECT * ,部門 AS x FROM #部門表 WHERE 父ID = 1
UNION ALL
SELECT b.id,b.部門,b.父ID,x FROM ct a INNER JOIN #部門表 b ON a.id = b.父ID
)
SELECT x AS 部門,COUNT(1) AS 人數
FROM ct a INNER JOIN #職工表 b ON b.部門 = a.部門
GROUP BY x
DROP TABLE #職工表
DROP TABLE #部門表
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/273059.html
標籤:基礎類
