create table UserInfo(userID varchar(10),UserName varchar(10),deparid nvarchar(10))
insert into UserInfo values('001' , N'赵雷' , N'A001')
insert into UserInfo values('002' , N'钱电' , N'A001')
insert into UserInfo values('003' , N'孙风' , N'A001')
insert into UserInfo values('004' , N'李云' , N'A002')
insert into UserInfo values('005' , N'周梅' , N'A002')
insert into UserInfo values('006' , N'吴兰' , N'A002')
insert into UserInfo values('007' , N'郑竹' , N'A002')
insert into UserInfo values('008' , N'王菊' , N'A003')create table Part(Dguid varchar(10),Dname varchar(10))
insert into Part values('A001' , N'部门1')
insert into Part values('A001' , N'部门1')
insert into Part values('A001' , N'部门1')
insert into Part values('A001' , N'部门1')
insert into Part values('A002' , N'部门2')
insert into Part values('A002' , N'部门2')
insert into Part values('A002' , N'部门2')
insert into Part values('A003' , N'部门3')create table Seq1(sequence varchar(10),userID varchar(10))
insert into Seq1 values('1' , '001')
insert into Seq1 values('1' , '002')
insert into Seq1 values('1' , '003')
insert into Seq1 values('1' , '004')
insert into Seq1 values('1' , '005')
insert into Seq1 values('1' , '006')
insert into Seq1 values('2' , '002')
insert into Seq1 values('2' , '002')create table Seq2(Prosequence varchar(10),userID varchar(10))
insert into Seq1 values('1' , '001')
insert into Seq1 values('1' , '002')
insert into Seq1 values('1' , '003')
insert into Seq1 values('1' , '004')
insert into Seq1 values('1' , '005')
insert into Seq1 values('1' , '006')
insert into Seq1 values('2' , '002')
insert into Seq1 values('2' , '002')先放测试数据
insert into Seq1 values('1' , '001')
insert into Seq1 values('1' , '002')
insert into Seq1 values('1' , '003')
insert into Seq1 values('1' , '004')
insert into Seq1 values('2' , '005')
insert into Seq1 values('2' , '006')
insert into Seq1 values('2' , '002')
insert into Seq1 values('2' , '002')
/-------- 结果
1 001
1 002
1 003
1 004
1 005
1 006
第二步:求userID 在UserInfo 中的数据
第三步:得出所在部门表Part
最终结果应该是-------------
sequence Dname
1 部门1
1 部分2
insert into Part values('A001' , N'部门1')
insert into Part values('A002' , N'部门2')
插入2条数据测试就行了
create table UserInfo(userID varchar(10),UserName varchar(10),deparid nvarchar(10))
insert into UserInfo values('001' , N'赵雷' , N'A001')
insert into UserInfo values('002' , N'钱电' , N'A001')
insert into UserInfo values('003' , N'孙风' , N'A001')
insert into UserInfo values('004' , N'李云' , N'A002')
insert into UserInfo values('005' , N'周梅' , N'A002')
insert into UserInfo values('006' , N'吴兰' , N'A002')
insert into UserInfo values('007' , N'郑竹' , N'A002')
insert into UserInfo values('008' , N'王菊' , N'A003')create table Part(Dguid varchar(10),Dname varchar(10))
insert into Part values('A001' , N'部门1')
insert into Part values('A001' , N'部门1')
insert into Part values('A001' , N'部门1')
insert into Part values('A001' , N'部门1')
insert into Part values('A002' , N'部门2')
insert into Part values('A002' , N'部门2')
insert into Part values('A002' , N'部门2')
insert into Part values('A003' , N'部门3')create table Seq1(sequence varchar(10),userID varchar(10))
insert into Seq1 values('1' , '001')
insert into Seq1 values('1' , '002')
insert into Seq1 values('1' , '003')
insert into Seq1 values('1' , '004')
insert into Seq1 values('1' , '005')
insert into Seq1 values('1' , '006')
insert into Seq1 values('2' , '002')
insert into Seq1 values('2' , '002')
create table Seq2(Prosequence varchar(10),userID varchar(10))
insert into Seq1 values('1' , '001')
insert into Seq1 values('1' , '002')
insert into Seq1 values('1' , '003')
insert into Seq1 values('1' , '004')
insert into Seq1 values('2' , '005')
insert into Seq1 values('2' , '006')
insert into Seq1 values('2' , '002')
insert into Seq1 values('2' , '002')select * from(
select b.userID,b.deparid,b.UserName,
a.sequence from(
select * from Seq1
union select * from Seq2) a
full join UserInfo b on a.userID=b.userID)c
full join Part d on c.deparid=d.Dguid/*
userID deparid UserName sequence Dguid Dname
001 A001 赵雷 1 A001 部门1
001 A001 赵雷 1 A001 部门1
001 A001 赵雷 1 A001 部门1
001 A001 赵雷 1 A001 部门1
002 A001 钱电 1 A001 部门1
002 A001 钱电 1 A001 部门1
002 A001 钱电 1 A001 部门1
002 A001 钱电 1 A001 部门1
002 A001 钱电 2 A001 部门1
002 A001 钱电 2 A001 部门1
002 A001 钱电 2 A001 部门1
002 A001 钱电 2 A001 部门1
003 A001 孙风 1 A001 部门1
003 A001 孙风 1 A001 部门1
003 A001 孙风 1 A001 部门1
003 A001 孙风 1 A001 部门1
004 A002 李云 1 A002 部门2
004 A002 李云 1 A002 部门2
004 A002 李云 1 A002 部门2
005 A002 周梅 1 A002 部门2
005 A002 周梅 1 A002 部门2
005 A002 周梅 1 A002 部门2
005 A002 周梅 2 A002 部门2
005 A002 周梅 2 A002 部门2
005 A002 周梅 2 A002 部门2
006 A002 吴兰 1 A002 部门2
006 A002 吴兰 1 A002 部门2
006 A002 吴兰 1 A002 部门2
006 A002 吴兰 2 A002 部门2
006 A002 吴兰 2 A002 部门2
006 A002 吴兰 2 A002 部门2
007 A002 郑竹 NULL A002 部门2
007 A002 郑竹 NULL A002 部门2
007 A002 郑竹 NULL A002 部门2
008 A003 王菊 NULL A003 部门3
*/不明白你的具体意思
union all
select * from Seq2 b where not exists(select * from Seq1 where b.Prosequence=sequence and b.userID=userID )
left join
select * from
(select * from Seq1 a where not exists(select * from Seq2 where Prosequence=a.sequence and userID=a.userID )
union all
select * from Seq2 b where not exists(select * from Seq1 where b.Prosequence=sequence and b.userID=userID ))m
left join UserInfo n on m.userID=n.userID
left join Part t on n.deparid=t.Dguid 显示的字段lz自己整理下
create table UserInfo(userID varchar(10),UserName varchar(10),deparid nvarchar(10))
insert into UserInfo values('001' , N'赵雷' , N'A001')
insert into UserInfo values('002' , N'钱电' , N'A001')
insert into UserInfo values('003' , N'孙风' , N'A001')
insert into UserInfo values('004' , N'李云' , N'A002')
insert into UserInfo values('005' , N'周梅' , N'A002')
insert into UserInfo values('006' , N'吴兰' , N'A002')
insert into UserInfo values('007' , N'郑竹' , N'A002')
insert into UserInfo values('008' , N'王菊' , N'A003')create table Part(Dguid varchar(10),Dname varchar(10))
insert into Part values('A001' , N'部门1')
insert into Part values('A002' , N'部门2')
create table Seq1(sequence varchar(10),userID varchar(10))
insert into Seq1 values('1' , '001')
insert into Seq1 values('1' , '002')
insert into Seq1 values('1' , '003')
insert into Seq1 values('1' , '004')
insert into Seq1 values('1' , '005')
insert into Seq1 values('1' , '006')
insert into Seq1 values('2' , '002')
insert into Seq1 values('2' , '002')
create table Seq2(Prosequence varchar(10),userID varchar(10))
insert into Seq1 values('1' , '001')
insert into Seq1 values('1' , '002')
insert into Seq1 values('1' , '003')
insert into Seq1 values('1' , '004')
insert into Seq1 values('2' , '005')
insert into Seq1 values('2' , '006')
insert into Seq1 values('2' , '002')
insert into Seq1 values('2' , '002')
select sequence,Dname,COUNT(*) as [counts] from(
select * from(
select b.userID,b.deparid,b.UserName,
isnull(a.sequence,0) as sequence from(
select * from Seq1 union select * from Seq2) a
full join UserInfo b on a.userID=b.userID)c
full join Part d on c.deparid=d.Dguid)e
group by sequence,Dname
/*
sequence Dname counts
0 NULL 1
1 部门1 3
2 部门1 1
0 部门2 1
1 部门2 3
2 部门2 2
*/--我姑且按照你统计每个sequence下的每个部门的人数来计算了
insert into UserInfo values('001' , N'赵雷' , N'A001')
insert into UserInfo values('002' , N'钱电' , N'A001')
insert into UserInfo values('003' , N'孙风' , N'A001')
insert into UserInfo values('004' , N'李云' , N'A002')
insert into UserInfo values('005' , N'周梅' , N'A002')
insert into UserInfo values('006' , N'吴兰' , N'A002')
insert into UserInfo values('007' , N'郑竹' , N'A002')
insert into UserInfo values('008' , N'王菊' , N'A003')但不知道你要干什么?
一个部门针对多个用户
通过获取Deparid 数据 还匹配 表2 所对应的部门
insert into UserInfo values('001' , N'赵雷' , N'A001')
insert into UserInfo values('002' , N'钱电' , N'A001')
insert into UserInfo values('003' , N'孙风' , N'A001')
insert into UserInfo values('004' , N'李云' , N'A002')
insert into UserInfo values('005' , N'周梅' , N'A002')
insert into UserInfo values('006' , N'吴兰' , N'A002')
insert into UserInfo values('007' , N'郑竹' , N'A002')
insert into UserInfo values('008' , N'王菊' , N'A003')
create table Part(Dguid varchar(10),Dname varchar(10))
insert into Part values('A001' , N'部门1')
insert into Part values('A002' , N'部门2')
create table Seq1(sequence varchar(10),userID varchar(10))
insert into Seq1 values('1' , '001')
insert into Seq1 values('1' , '002')
insert into Seq1 values('1' , '003')
insert into Seq1 values('1' , '004')
insert into Seq1 values('1' , '005')
insert into Seq1 values('1' , '006')
insert into Seq1 values('2' , '002')
insert into Seq1 values('2' , '002')
create table Seq2(Prosequence varchar(10),userID varchar(10))
insert into Seq2 values('1' , '001')
insert into Seq2 values('1' , '002')
insert into Seq2 values('1' , '003')
insert into Seq2 values('1' , '004')
insert into Seq2 values('2' , '005')
insert into Seq2 values('2' , '006')
insert into Seq2 values('2' , '002')
insert into Seq2 values('2' , '002')select m.*,
[UserInfo_cnt] = isnull((select count(1) from UserInfo n where n.deparid = m.dguid),0),
[Seq1_cnt_按照实际匹配数量] = isnull((select count(1) from UserInfo n , Seq1 t where n.deparid = m.dguid and n.userID = t.userID),0),
[Seq2_cnt_按照实际匹配数量] = isnull((select count(1) from UserInfo n , Seq2 t where n.deparid = m.dguid and n.userID = t.userID),0),
[Seq1_cnt_去重复后匹配数量] = isnull((select count(1) from UserInfo n , (select distinct * from seq1) t where n.deparid = m.dguid and n.userID = t.userID),0),
[Seq2_cnt_去重复后匹配数量] = isnull((select count(1) from UserInfo n , (select distinct * from seq2) t where n.deparid = m.dguid and n.userID = t.userID),0)
from Part m
drop table UserInfo,Part,Seq1 ,Seq2/*
Dguid Dname UserInfo_cnt Seq1_cnt_按照实际匹配数量 Seq2_cnt_按照实际匹配数量 Seq1_cnt_去重复后匹配数量 Seq2_cnt_去重复后匹配数量
---------- ---------- ------------ ----------------- ----------------- ----------------- -----------------
A001 部门1 3 5 5 4 4
A002 部门2 4 3 3 3 3(所影响的行数为 2 行)
*/
http://topic.csdn.net/u/20120322/19/78ab049c-2778-4526-8b13-4656929662a4.html
乌龟 帮忙看下
insert into UserInfo values('001' , N'赵雷' , N'A001')
insert into UserInfo values('002' , N'钱电' , N'A001')
insert into UserInfo values('003' , N'孙风' , N'A001')
insert into UserInfo values('004' , N'李云' , N'A002')
insert into UserInfo values('005' , N'周梅' , N'A002')
insert into UserInfo values('006' , N'吴兰' , N'A002')
insert into UserInfo values('007' , N'郑竹' , N'A002')
insert into UserInfo values('008' , N'王菊' , N'A003')create table Part(Dguid varchar(10),Dname varchar(10))
insert into Part values('A001' , N'部门1')
insert into Part values('A002' , N'部门2')
insert into Part values('A003' , N'部门3')create table Seq1(sequence varchar(10),userID varchar(10))
insert into Seq1 values('1' , '001')
insert into Seq1 values('1' , '002')
insert into Seq1 values('1' , '003')
insert into Seq1 values('1' , '004')
insert into Seq1 values('1' , '005')
insert into Seq1 values('1' , '006')
insert into Seq1 values('2' , '002')
insert into Seq1 values('2' , '002')create table Seq2(sequence varchar(10),userID varchar(10))
insert into Seq2 values('1' , '001')
insert into Seq2 values('1' , '002')
insert into Seq2 values('1' , '003')
insert into Seq2 values('1' , '004')
insert into Seq2 values('2' , '005')
insert into Seq2 values('2' , '006')
insert into Seq2 values('2' , '002')
insert into Seq2 values('2' , '002')
go
--1.方法一
select p.* from Part p where exists(select 1 from UserInfo u,
(
select sequence ,userID from seq1 where sequence = 1
union
select sequence ,userID from seq2 where sequence = 1
) s
where p.Dguid = u.deparid and u.userID = s.userID)
/*
Dguid Dname
---------- ----------
A001 部门1
A002 部门2(所影响的行数为 2 行)
*/--2.方法二
select distinct p.* from Part p , UserInfo u,
(
select sequence ,userID from seq1 where sequence = 1
union
select sequence ,userID from seq2 where sequence = 1
) s
where p.Dguid = u.deparid and u.userID = s.userID
/*
Dguid Dname
---------- ----------
A001 部门1
A002 部门2(所影响的行数为 2 行)
*/drop table UserInfo,Part,Seq1,Seq2