求一查询语句,急!!!!!!!(up有分)

xuelanghunlzj 2005-02-28 03:05:12

编号 字段
1 ass,dfg,ert
1 ass,dfg
... ...

结果:
编号 A B ...
1 ass dfg ...

要求:用一查询语句+一个函数
...全文
101 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zarge 2005-02-28
  • 打赏
  • 举报
回复
create table t1( id int, str varchar(100) )

insert into t1 values( 1, 'ass,dfg,ert' )
insert into t1 values( 1, 'ass,dfg' )
insert into t1 values( 1, 'vvv' )

create function dbo.f_getstr( @id int )
returns varchar(1000)
as
begin
declare @str varchar(1000)
set @str = ''
select @str = @str + str + ',' from t1 where id = @id
return @str
end

create function dbo.f_split()
returns @v table( id int, str varchar(100), seq int )
as
begin
declare @id int
declare @str varchar(1000)
declare @pos1 int, @pos2 int

declare cur cursor for select distinct id from t1
open cur
while 1 = 1
begin
fetch next from cur into @id
if @@fetch_status <> 0 break

set @str = dbo.f_getstr(@id)
set @pos1 = 1
set @pos2 = charindex( ',', @str, @pos1 )
while @pos2 > 0
begin
if not exists( select 1 from @v where id = @id and str = substring( @str, @pos1, @pos2 - @pos1 ) )
insert into @v select @id, substring( @str, @pos1, @pos2 - @pos1 ), (select count(*) from @v where id = @id ) + 1

set @pos1 = @pos2 + 1
set @pos2 = charindex( ',', @str, @pos1 )
end
end
close cur
deallocate cur
return
end

declare @sql varchar(8000)
set @sql = 'select id'
select @sql = @sql + ',max(case seq when '''+cast(seq as varchar)+''' then str end) ['+cast(seq as varchar)+']' from (select distinct seq from dbo.f_split()) as a
select @sql = @sql+' from dbo.f_split() group by id'

exec(@sql)
xuelanghunlzj 2005-02-28
  • 打赏
  • 举报
回复

编号 人员
1 ass,dfg,ert
1 ass,dfg
1 vvv
... ...

结果:
编号 人员A 人员B 人员C 人员D ...
1 ass dfg ert vvv ...

注意:人员重复的去掉
fesxe 2005-02-28
  • 打赏
  • 举报
回复
declare @a nvarchar(50)
set @a = 'ass,dfg,ert'
select left(@a,charindex(',',@a)-1)
select right(@a,len(@a)-charindex(',',@a))
你可以把right(@a,len(@a)-charindex(',',@a)) 嵌入到@a 里面...有几级就嵌几级..我也没有什么更好的办法了..
fesxe 2005-02-28
  • 打赏
  • 举报
回复
最多 有几个?
fesxe 2005-02-28
  • 打赏
  • 举报
回复
declare @a nvarchar(50)
set @a = 'ass,dfg,ert'
select left(@a,charindex(',',@a)-1)
select right(@a,len(@a)-charindex(',',@a))
xuelanghunlzj 2005-02-28
  • 打赏
  • 举报
回复
要求可以不管,只要能实现就行了。
xuelanghunlzj 2005-02-28
  • 打赏
  • 举报
回复
要求可以不管,只要能实现就行了。
winternet 2005-02-28
  • 打赏
  • 举报
回复
能不能把关系说明一下呢?
子陌红尘 2005-02-28
  • 打赏
  • 举报
回复
不好办,估计还得用动态SQL。
UP

34,593

社区成员

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

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