求一个两个表多行多栏位匹配的查询

jyh070207 2025-03-25 15:02:56

有表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则找不到内容

...全文
54 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 04-15
  • 打赏
  • 举报
回复

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 行受影响)
*/

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧