34,837
社区成员




有表A,B, A为模板表,模板编号,序号,模板内容,一个模板可以有多条明细内容
B为具体事务表,有单号,序号,内容,一个单号可以有多条明细内容,
如何找出B用到的A模板,要求同一单号的行数与模板行数相同,而且,相应行的序号与内容要完全相同。
表a:
模板编号,序号,模板内容
A001, 1,'A01'
A001,2,'A02'
A001,3.'A03'
A002 1'B01'
A002 2' B02'
表b:
单号,序号,内容
'S001', 1,'A01'
'S001',2,'A02'
'S001',3.'A03'
'S002' 1'B01'
则S001单号会找到模板A001,行数相同3行,序号及内容相同。S002则找不到内容
create table A(modle_no varchar(20),no int,modle_con varchar(20))
insert into A values('A001',1,'A01')
insert into A values('A001',2,'A02')
insert into A values('A001',3,'A03')
insert into A values('A002',1,'B01')
insert into A values('A002',2,'B02')
create table B(table_no varchar(20),no int,table_con varchar(20))
insert into B values('S001',1,'A01')
insert into B values('S001',2,'A02')
insert into B values('S001',3,'A03')
insert into B values('S002',1,'B01')
go
select B.table_no , A.modle_no , sum(case when A.no = B.no and A.modle_con = B.table_con then 1 else 0 end) sl
from A , B
group by B.table_no , A.modle_no
having sum(case when A.no = B.no and A.modle_con = B.table_con then 1 else 0 end) = (select COUNT(1) from A T where T.modle_no = A.modle_no)
order by B.table_no , A.modle_no
drop table A
drop table B
/*
table_no modle_no sl
S001 A001 3
(1 行受影响)
*/