表A:departid(部门代码)varchar 100 departname (部门名称)varchar 30 departempCount (部门人数) int
A **公司
A01 总务部
A0101 人事部
A0102 公关部
A02 制造部
A0201 装配一车间
A0202 装配二车间
A03 财务部
A04 销售部
。。其中像A则是公司或者理解为总部门,A0101 ,A0201等则是相应A01 ,A02的子部门表B:
departid varchar 100 部门代码 employeeid varchar 10员工编号 employeename char 30员工姓名
A01 HR9910 AAA
A0101 SSC002 BBB
A0201 FA0115 CCC
求:一条SQL语句将统计表A中的departempCount数据,统计各部门的人员数据,注意像A01,A02这样的部门人数应该是包含下级部门及本部门的人员在内,A部门则应该是公司所有人员的数据合计
A **公司
A01 总务部
A0101 人事部
A0102 公关部
A02 制造部
A0201 装配一车间
A0202 装配二车间
A03 财务部
A04 销售部
。。其中像A则是公司或者理解为总部门,A0101 ,A0201等则是相应A01 ,A02的子部门表B:
departid varchar 100 部门代码 employeeid varchar 10员工编号 employeename char 30员工姓名
A01 HR9910 AAA
A0101 SSC002 BBB
A0201 FA0115 CCC
求:一条SQL语句将统计表A中的departempCount数据,统计各部门的人员数据,注意像A01,A02这样的部门人数应该是包含下级部门及本部门的人员在内,A部门则应该是公司所有人员的数据合计
解决方案 »
- [疑难问题]无法从链接服务器 "TEST" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 获取行的数据。
- SQLSERVER2005不让客户看到我的数据,怎么弄??
- 选出不是连续重复的..
- 视图使用的疑问?
- 如何更新一个条件在另一个表里的语句
- 项目部署怎么就是连不上服务器啊 本机
- 求助!!行与行之间怎样相减??
- 存储过程中将一个“;”分隔的字符串分拆称多条数据?
- 怎样在Delphi中执行脚本(SQL server)?
- 请问:我做的一个简体中文的网站要加做一个繁体版的,怎样使网页上显示的从数据库里动态
- SQLSERVER数据库中如何将一个表中的数据拷贝到另一个表中?
- 求一触发器
IF OBJECT_ID('B') IS NOT NULL DROP TABLE B
CREATE TABLE A(
departid varchar(100)
,departname varchar(30)
,departempCount int
)
INSERT INTO A(DEPARTID,DEPARTNAME)
SELECT 'A','**公司' UNION ALL
SELECT 'A01','总务部' UNION ALL
SELECT 'A0101','人事部' UNION ALL
SELECT 'A0102','公关部' UNION ALL
SELECT 'A02','制造部' UNION ALL
SELECT 'A0201','装配一车间' UNION ALL
SELECT 'A0202','装配二车间' UNION ALL
SELECT 'A03','财务部' UNION ALL
SELECT 'A04','销售部'
CREATE TABLE B(
departid varchar(100)
,employeeid varchar(10)
,employeename char(30)
)
INSERT INTO B
SELECT 'A01','HR9910','AAA' UNION ALL
SELECT 'A0101','SSC002','BBB' UNION ALL
SELECT 'A0201','FA0115','CCC'SELECT T3.DEPARTID
,T3.departname
,(SELECT COUNT(1) FROM B T2 WHERE T2.DEPARTID LIKE T1.DEPARTID+'%') '人员总计'
FROM B T1
RIGHT JOIN A T3 ON T1.DEPARTID=T3.DEPARTID
/*
A **公司 0
A01 总务部 2
A0101 人事部 1
A0102 公关部 0
A02 制造部 0
A0201 装配一车间 1
A0202 装配二车间 0
A03 财务部 0
A04 销售部 0
*/
IF OBJECT_ID('A') IS NOT NULL DROP TABLE A
IF OBJECT_ID('B') IS NOT NULL DROP TABLE B
CREATE TABLE A(
departid varchar(100)
,departname varchar(30)
,departempCount int
)
INSERT INTO A(DEPARTID,DEPARTNAME)
SELECT 'A','**公司' UNION ALL
SELECT 'A01','总务部' UNION ALL
SELECT 'A0101','人事部' UNION ALL
SELECT 'A0102','公关部' UNION ALL
SELECT 'A02','制造部' UNION ALL
SELECT 'A0201','装配一车间' UNION ALL
SELECT 'A0202','装配二车间' UNION ALL
SELECT 'A03','财务部' UNION ALL
SELECT 'A04','销售部'
CREATE TABLE B(
departid varchar(100)
,employeeid varchar(10)
,employeename char(30)
)
INSERT INTO B
SELECT 'A01','HR9910','AAA' UNION ALL
SELECT 'A0101','SSC002','BBB' UNION ALL
SELECT 'A0201','FA0115','CCC'SELECT T3.DEPARTID
,T3.departname
,(SELECT COUNT(1) FROM B T2 WHERE T2.DEPARTID LIKE T3.DEPARTID+'%') '人员总计'
FROM B T1
RIGHT JOIN A T3 ON T1.DEPARTID=T3.DEPARTID
/*
A **公司 3
A01 总务部 2
A0101 人事部 1
A0102 公关部 0
A02 制造部 1
A0201 装配一车间 1
A0202 装配二车间 0
A03 财务部 0
A04 销售部 0
*/
FROM B T1count(1)是何意?可否请楼上的解释一下?
SELECT T3.DEPARTID
,T3.departname
,COUNT(T1.employeeid) '人员总计'
FROM B T1
RIGHT JOIN A T3 ON T1.DEPARTID LIKE T3.DEPARTID+'%'
GROUP BY T3.DEPARTID,T3.departname
if object_id('[a]') is not null drop table [a]
create table [a] (departid varchar(5),departname varchar(10),departempCount int)
insert into [a]
select 'A','**公司',null union all
select 'A01','总务部',null union all
select 'A0101','人事部',null union all
select 'A0102','公关部',null union all
select 'A02','制造部',null union all
select 'A0201','装配一车间',null union all
select 'A0202','装配二车间',null union all
select 'A03','财务部',null union all
select 'A04','销售部',null
--> 测试数据: [B]
if object_id('[B]') is not null drop table [B]
create table [B] (departid varchar(5),employeeid varchar(6),employeename varchar(3))
insert into [B]
select 'A01','HR9910','AAA' union all
select 'A0101','SSC002','BBB' union all
select 'A0201','FA0115','CCC'
update A set departempCount=(select count(1) from b where departid like a.departid+'%') from aselect * from [A]--结果:
departid departname departempCount
-------- ---------- --------------
A **公司 3
A01 总务部 2
A0101 人事部 1
A0102 公关部 0
A02 制造部 1
A0201 装配一车间 1
A0202 装配二车间 0
A03 财务部 0
A04 销售部 0
IF OBJECT_ID('A') IS NOT NULL DROP TABLE A
IF OBJECT_ID('B') IS NOT NULL DROP TABLE B
CREATE TABLE A(
departid varchar(100)
,departname varchar(30)
,departempCount int
)
INSERT INTO A(DEPARTID,DEPARTNAME)
SELECT 'A','**公司' UNION ALL
SELECT 'A01','总务部' UNION ALL
SELECT 'A0101','人事部' UNION ALL
SELECT 'A0102','公关部' UNION ALL
SELECT 'A02','制造部' UNION ALL
SELECT 'A0201','装配一车间' UNION ALL
SELECT 'A0202','装配二车间' UNION ALL
SELECT 'A03','财务部' UNION ALL
SELECT 'A04','销售部'
CREATE TABLE B(
departid varchar(100)
,employeeid varchar(10)
,employeename char(30)
)
INSERT INTO B
SELECT 'A01','HR9910','AAA' UNION ALL
SELECT 'A0101','SSC002','BBB' UNION ALL
SELECT 'A0201','FA0115','CCC'UPDATE A SET departempCount=T.TOTAL
FROM A
INNER JOIN (
SELECT T3.DEPARTID
,T3.departname
,COUNT(T1.employeeid) 'TOTAL'
FROM B T1
RIGHT JOIN A T3 ON T1.DEPARTID LIKE T3.DEPARTID+'%'
GROUP BY T3.DEPARTID,T3.departname) T ON A.DEPARTID=T.DEPARTID
SELECT * FROM A
/*
A **公司 3
A01 总务部 2
A0101 人事部 1
A0102 公关部 0
A02 制造部 1
A0201 装配一车间 1
A0202 装配二车间 0
A03 财务部 0
A04 销售部 0
*/
为什么要还要连接一下:不连接不是也可以吗?
SELECT T3.DEPARTID,T3.departname,(SELECT COUNT(*) FROM B T2 WHERE T2.DEPARTID LIKE T3.DEPARTID+'%') '人员总计'
FROM A t3