这个功能能用1个sql语句实现吗?

hzyzx 2005-04-07 02:37:09
现在在我的表中有如下的数据
表1
字段1 字段2 字段3
101 121 abcde
102 aaa abc
103 252425 dc
表2
字段1 字段2
a 1414
b 1245
c 5454
d efde
e sfsf

最后我要的结果是统计表2中的记录在表1中出现的次数
结果如下

a 1414 2
b 1245 2
c 5454 3
d efde 2
e sfsf 1
请问用一个sql语句怎么解决。
出结果给分,分不够再给
...全文
106 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomeixiang 2005-04-07
  • 打赏
  • 举报
回复
create table 表1(字段1 int,字段2 varchar(20),字段3 varchar(10))

insert into 表1 select 101,'121 ','abcde'
insert into 表1 select 102,'aaa ','abc '
insert into 表1 select 103,'252425','dc '

create table 表2(字段1 char(1),字段2 varchar(4))
insert into 表2 select 'a','1414'
insert into 表2 select 'b','1245'
insert into 表2 select 'c','5454'
insert into 表2 select 'd','efde'
insert into 表2 select 'e','sfsf'

declare @str varchar(200)
set @str=''
select @str=@str+字段3 from 表1
select *,len(@str)-len(replace(@str,字段1,'')) as total from 表2

drop table 表1,表2
xluzhong 2005-04-07
  • 打赏
  • 举报
回复
--生成测试数据
create table 表1(字段1 int,字段2 varchar(20),字段3 varchar(10))

insert into 表1 select 101,'121 ','abcde'
insert into 表1 select 102,'aaa ','abc '
insert into 表1 select 103,'252425','dc '

create table 表2(字段1 char(1),字段2 varchar(4))
insert into 表2 select 'a','1414'
insert into 表2 select 'b','1245'
insert into 表2 select 'c','5454'
insert into 表2 select 'd','efde'
insert into 表2 select 'e','sfsf'
go

select 字段1=case when grouping(a.字段1)=1 then '合计' else a.字段1 end,
字段2=case when grouping(a.字段1)=1 then '' else a.字段2 end,
cnt=count(*)
from 表2 a
left join 表1 b on charindex(a.字段1,b.字段3)>0
group by a.字段1,a.字段2 with rollup
having grouping(a.字段1)=1 or grouping(a.字段2)=0
go

drop table 表1,表2

/*--结果

字段1 字段2 cnt
---- ---- -----------
a 1414 2
b 1245 2
c 5454 3
d efde 2
e sfsf 1
合计 10
--*/
zjcxc 2005-04-07
  • 打赏
  • 举报
回复
--生成测试数据
create table 表1(字段1 int,字段2 varchar(20),字段3 varchar(10))

insert into 表1 select 101,'121 ','abcde'
insert into 表1 select 102,'aaa ','abc '
insert into 表1 select 103,'252425','dc '

create table 表2(字段1 char(1),字段2 varchar(4))
insert into 表2 select 'a','1414'
insert into 表2 select 'b','1245'
insert into 表2 select 'c','5454'
insert into 表2 select 'd','efde'
insert into 表2 select 'e','sfsf'
go

select 字段1=case when grouping(a.字段1)=1 then '合计' else a.字段1 end,
字段2=case when grouping(a.字段1)=1 then '' else a.字段2 end,
cnt=count(*)
from 表2 a
left join 表1 b on charindex(a.字段1,b.字段3)>0
group by a.字段1,a.字段2 with rollup
having grouping(a.字段1)=1 or grouping(a.字段2)=0
go

drop table 表1,表2

/*--结果

字段1 字段2 cnt
---- ---- -----------
a 1414 2
b 1245 2
c 5454 3
d efde 2
e sfsf 1
合计 10
--*/
子陌红尘 2005-04-07
  • 打赏
  • 举报
回复
--生成测试数据
create table 表1(字段1 int,字段2 varchar(20),字段3 varchar(10))

insert into 表1 select 101,'121 ','abcde'
insert into 表1 select 102,'aaa ','abc '
insert into 表1 select 103,'252425','dc '

create table 表2(字段1 char(1),字段2 varchar(4))
insert into 表2 select 'a','1414'
insert into 表2 select 'b','1245'
insert into 表2 select 'c','5454'
insert into 表2 select 'd','efde'
insert into 表2 select 'e','sfsf'

--执行查询
select
c.*
from
(select
b.字段1,
字段2 =(case when b.字段1 is null and b.字段2 is null then '合计' else b.字段2 end),
num = count(a.字段3)
from
表2 b
left join
表1 a
on
charindex(b.字段1,a.字段3)>0
group by
b.字段1,b.字段2 with rollup) c
where
c.字段2 is not null
子陌红尘 2005-04-07
  • 打赏
  • 举报
回复
select
c.*
from
(select
b.字段1,
字段2 = case when b.字段1 is null and b.字段2 is null then '合计' else b.字段2,
count(a.*)
from
表2 b
left join
表1 a
on
charindex(b.字段1,a.字段3)>0
group by
b.字段1,b.字段2 with rollup) c
where
c.字段2 is not null
hzyzx 2005-04-07
  • 打赏
  • 举报
回复
最后还要汇总
a 1414 2
b 1245 2
c 5454 3
d efde 2
e sfsf 1
合计 10

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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