有一表:
结构如下
CREATE TABLE [dbo].[AB](
[AA] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[BB] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]插入数据insert into AB(AA,AB)values('A1,A2,A3,A4,A5,A6,A7','A5,A3,A7')
insert into AB(AA,AB)values('张三,李四,王五,赵柳,王八','王八,李四,张三')
求一sql语句,得到查询结果如下: AA
A1,A2,A3(有),A4,A5(有),A6,A7(有)
张三(有),李四(有),王五,赵柳,王八(有)请高手指点。
结构如下
CREATE TABLE [dbo].[AB](
[AA] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[BB] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]插入数据insert into AB(AA,AB)values('A1,A2,A3,A4,A5,A6,A7','A5,A3,A7')
insert into AB(AA,AB)values('张三,李四,王五,赵柳,王八','王八,李四,张三')
求一sql语句,得到查询结果如下: AA
A1,A2,A3(有),A4,A5(有),A6,A7(有)
张三(有),李四(有),王五,赵柳,王八(有)请高手指点。
解决方案 »
- 望高手给一SQl语句,万分感谢!!
- MSSQL的日志记录的信息有那些,如何查看?
- 统计问题
- 为什么数据库的.LDF文件如此的大?怎么变小点啊??
- ntext字段类型操作
- 非常着急,请教各位了SQL数据库编码重复的问题,谢谢!
- 为什么总是提示一个错误!!
- SELECT COUNT(*) 人数, 男生数, 女生数, from 学校 group by 班级
- order by case when @OrderBy=1 then 'CreateDate desc' end 不起作用?
- 使用DISTINCT后是否可以显示多个字段?
- 优化,一张容纳海量数据的表,会经常被更新和插入数据(插入数据更多),在不同时间段还会被查询,这样的表需要建立索引么?
- 如何将一张表中有着相同ID的某个字段的所有值在查询结果中放入一个字段
insert into AB(AA,AB)values('张三,李四,王五,赵柳,王八','王八,李四,张三')
什么意思啊
数据没有任何的关系,我只是做一些简单的数据作为测试。我只是想要这种效果,就是在AA字段中表现出BB字段中出现的数据。我要这个效果 跟表结构的设计没有关系的。
/*
CREATE FUNCTION [dbo].[m_BB]
(
@a VARCHAR(2000) ,
@b VARCHAR(2000) ,
@split VARCHAR(2)
)
RETURNS VARCHAR(2000)
AS
BEGIN
DECLARE @t1 TABLE ( col VARCHAR(2000) )
WHILE ( CHARINDEX(@split, @a) <> 0 )
BEGIN
IF ( SUBSTRING(@a, 1, CHARINDEX(@split, @a) - 1) != ' ' )
BEGIN
INSERT @t1
( col
)
VALUES ( SUBSTRING(@a, 1, CHARINDEX(@split, @a) - 1)
)
END
SET @a = STUFF(@a, 1, CHARINDEX(@split, @a), '')
END
INSERT @t1
( col )
VALUES ( @a )
DECLARE @t2 TABLE ( col VARCHAR(2000) )
WHILE ( CHARINDEX(@split, @b) <> 0 )
BEGIN
IF ( SUBSTRING(@b, 1, CHARINDEX(@split, @b) - 1) != ' ' )
BEGIN
INSERT @t2
( col
)
VALUES ( SUBSTRING(@b, 1, CHARINDEX(@split, @b) - 1)
)
END
SET @b = STUFF(@b, 1, CHARINDEX(@split, @b), '')
END
INSERT @t2
( col )
VALUES ( @b )
DECLARE @sql VARCHAR(2000)
SET @sql = ''
SELECT @sql = @sql + ISNULL(b.col + '(有)', a.col) + ','
FROM @t1 a
LEFT JOIN @t2 b ON a.col = b.col
RETURN @sql
END
*/
SELECT [dbo].[m_BB](AA,BB,',') AS AA FROM AB
/*
AA
-------------------------------------------
A1,A2,A3(有),A4,A5(有),A6,A7(有),
张三(有),李四(有),王五,赵柳,王八(有),
*/
----drop table abCREATE TABLE [dbo].[AB](
[AA] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[BB] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[CC] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
insert into AB(AA,BB)values('A1,A2,A3,A4,A5,A6,A7','A5,A3,A7')
insert into AB(AA,BB)values('张三,李四,王五,赵柳,王八','王八,李四,张三')update AB set CC = AA
/****
将以上数据修改为下面的样子
A1,A2,A3(有),A4,A5(有),A6,A7(有)
张三(有),李四(有),王五,赵柳,王八(有)***/declare @string table
(c_string varchar(20))delete @stringdeclare @bb varchar(50),@bb1 varchar(50)
declare @i int,@i0 int ,@tmp varchar(100)
---第一次游标,将bb字段的逗号分隔符字符串变成表变量
declare curs_ab1 cursor
for
select bb from ab open curs_ab1
fetch curs_ab1 into @bb while @@fetch_status=0
begin
delete @string
select @bb=ltrim(rtrim(isnull(@bb,'')))
set @i=1
set @i0 = 0
while(@i<=len(@bb))
begin
if (substring(@bb,@i,1)=',') or @i=len(@bb)
begin
set @tmp = substring(@bb,@i0+1,@i - @i0 )
if not (@tmp is null or @tmp = '') begin
insert into @string(c_string)
select replace(@tmp,',','')
end
set @i0 = @i
end
set @i=@i+1
end
---第二次游标,将bb字段分割出的表变量比较aa字段,并将**替换为 **(有)
declare curs_ab2 cursor
for
select c_string from @string open curs_ab2
fetch curs_ab2 into @bb1 while @@fetch_status=0
begin
update AB set CC = REPLACE(cc,@bb1,@bb1+'(有)')
from AB
where BB = @bb
fetch curs_ab2 into @bb1
end
close curs_ab2
deallocate curs_ab2
fetch curs_ab1 into @bb
end
close curs_ab1
deallocate curs_ab1
select cc from ab
/****
A1,A2,A3(有),A4,A5(有),A6,A7(有)
张三(有),李四(有),王五,赵柳,王八(有)
****/