已知表t 两个字段 id, val
记录列表
id val
1 a
1 b
2 a
2 b
3 a
3 c
4 a
4 c
要求通过sql语句得出val都相同的id序列
结果集为
id_list
1,2
3,4
有点像关系运算里的除法运算,当结果可以其他形式给出,只要能分别得出 a,b 与 a,c 各自对应的id序列就行
...全文
19013打赏收藏
SQL难题求解
已知表t 两个字段 id, val 记录列表 id val 1 a 1 b 2 a 2 b 3 a 3 c 4 a 4 c 要求通过sql语句得出val都相同的id序列 结果集为 id_list 1,2 3,4 有点像关系运算里的除法运算,当结果可以其他形式给出,只要能分别得出 a,b 与 a,c 各自对应的id序列就行
上面有错误,改一下
create function dbo.f_str(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+val from groupaa where id=@id order by val
return (substring(@str,2,len(@str)))
end
select id,dbo.f_str(id) as col1
from t
group by id
order by col1
没测试,楼主自己测一下 这样可以把相同值的显示在一起
create function f_str(@id int)
resturns varchar(8000)
as
begin
declare @str varchar(8000)
select @str=@str+','+val from t where id=@id order by val
return(substring(@str,2,len(@str))
end
select id,dbo.f_str(id) as col1
from t
group by id
order by col1
create function dbo.f_str(@id varchar( 500 ))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+',' + ltrim( rtrim( val ) )
from t where id=@id
order by val
return (substring(@str,2,len(@str)))
end
create function dbo.f_id_str(@vals varchar( 500 ) )
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str = @str + ',' + ltrim( rtrim( [id] ) )
from
(
select [id], dbo.f_str( id ) as vals
from t
group by [id]
) a
where vals=@vals
order by is
return (substring(@str,2,len(@str)))
end
select vals, dbo.f_id_str( vals ) as ids
from
(
select id, dbo.f_str( id ) as vals
from t
group by id
) as x
group by vals
create function dbo.f_str(@id char)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+',' + ltrim( rtrim( val ) )
from t where id=@id
order by val
return (substring(@str,2,len(@str)))
end
create function dbo.f_id_str(@vals char )
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str = @str + ',' + ltrim( rtrim( [id] ) )
from
(
select [id], dbo.f_str( id ) as vals
from t
group by [id]
) a
where vals=@vals
order by is
return (substring(@str,2,len(@str)))
end
select vals, dbo.f_id_str( vals ) as ids
from
(
select id, dbo.f_str( id ) as vals
from t
group by id
) as x
group by vals
但你的第二句中
select @str=@str+','+val from groupaa where id=@id order by val
from groupaa是指什么?? ~~~~~~~
要改为才能运行
select @str=@str+','+val from t where id=@id order by val
create function dbo.f_str(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+',' + ltrim( rtrim( val ) ) from t where id=@id order by val
return (substring(@str,2,len(@str)))
end
select id,dbo.f_str(id) as col1
from t
group by id
order by col1
但你的第二句中select @str=@str+','+val from groupaa where id=@id order by val
from groupaa是指什么??