a表id yhname
1 优惠1
2 优惠2
3 优惠3
4 优惠4
5 优惠n
B表nid yhcontent
1 优惠1,优惠2
2 优惠1,优惠4
3 优惠2,优惠3请问我想得出以下结果
B表中含有优惠1,优惠2,优惠n的个数
1 优惠1
2 优惠2
3 优惠3
4 优惠4
5 优惠n
B表nid yhcontent
1 优惠1,优惠2
2 优惠1,优惠4
3 优惠2,优惠3请问我想得出以下结果
B表中含有优惠1,优惠2,优惠n的个数
解决方案 »
- 简单的数据库应用(SQL server)题目~~
- mysql主键与自增问题
- 求一个记录定位的SQL
- SQL 要求用语句进行备份数据库 怎么弄啊 我是初学者
- 请问修改字段值 SQL语句怎么写呢?暴走ing....
- 为什么我的SQL SERVER 2005启动不了
- 请教:安装 server的时候为什么他默认的时候总是以sa身份,为什么系统不能让我自己分配命名
- 在安装sqlserver2000时 中选择何种许可模式?
- 请教union数据,高手请进,100分
- dbutils 一对多的两个表,查询子表的信息和子表在主表中的相应信息
- sql server 2000 表结构和数据 怎样导入到Mysql中??????????(加急)
- sql查询问题
B表中的yhcontent怎么知道该填那种优惠?
drop function [dbo].[f_splitSTR]
GO
select * from f_splitSTR('a,b,c',',')
--3.2.1 循环截取法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
GO
/*==============================================*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO--3.2.3.1 使用临时性分拆辅助表法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
--创建分拆处理的辅助表(用户定义函数中只能操作表变量)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID
RETURN
END
GO
select * from dbo.f_splitSTR('10.10.11','.')
/*==============================================*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb_splitSTR]') and objectproperty(id,N'IsUserTable')=1)
drop table [dbo].[tb_splitSTR]
GO--3.2.3.2 使用永久性分拆辅助表法
--字符串分拆辅助表
SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTR
FROM syscolumns a,syscolumns b
GO--字符串分拆处理函数CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS TABLE
AS
RETURN(
SELECT col=CAST(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as varchar(100))
FROM tb_splitSTR
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID)
GO返回B表后连接求sum
insert tb1 values(1 , '优惠1')
insert tb1 values(2 , '优惠2')
insert tb1 values(3 , '优惠3')
insert tb1 values(4 , '优惠4')
insert tb1 values(5 , '优惠n')create table tb2(nid int,yhcontent varchar(50))
insert tb2 values(1 , '优惠1,优惠2')
insert tb2 values(2 , '优惠1,优惠4')
insert tb2 values(3 , '优惠2,优惠3')select a.id,a.yhname,sum(case when charindex(a.yhname,b.yhcontent)>0 then 1 else 0 end) num
from tb1 a left join tb2 b
on charindex(a.yhname,b.yhcontent)>0
group by a.id,a.yhnamedrop table tb1,tb2/*
id yhname num
----------- -------------------------------------------------- -----------
1 优惠1 2
2 优惠2 2
3 优惠3 1
4 优惠4 1
5 优惠n 0(所影响的行数为 5 行)*/
结帖方式 :管理帖子->给分->输入密码->结帖谢谢.