免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 15331 | 回复: 30
打印 上一主题 下一主题

一个SQL语句的问题: [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-02-17 09:14 |只看该作者 |倒序浏览
select * from v_temp
上面的视图结果如下:
user_name       role_name
-------------------------
系统管理员        管理员         
feng                管理员         
feng                一般用户        
test                一般用户        


想把结果变成这样:
user_name       role_name
---------------------------
系统管理员        管理员         
feng                管理员,一般用户         
test                一般用户

论坛徽章:
0
2 [报告]
发表于 2004-02-17 09:54 |只看该作者
搞定了:
SELECT AA.user_name,AA.role_name,BB.role_name FROM v_temp AA,v_temp BB
WHERE AA.user_name=BB.user_name AND AA.role_name<>BB.role_name AND AA.role_name < BB.role_name

论坛徽章:
0
3 [报告]
发表于 2004-02-17 09:54 |只看该作者
再加上一个不重复的就行了.

论坛徽章:
0
4 [报告]
发表于 2004-02-17 10:12 |只看该作者
问题又来了,如果\"user_name\"中相同的不只是两个,或者说无法确定有多少个的情况,以上语句就无法实现要求了.各位有没有好的方法,用一句SQL来实现的?

论坛徽章:
0
5 [报告]
发表于 2004-02-17 12:29 |只看该作者
create table a_test(name varchar(20),role2 varchar(20))

insert into a_test values(\'李\',\'管理員\')
insert into a_test values(\'張\',\'管理員\')
insert into a_test values(\'張\',\'一般用戶\')
insert into a_test values(\'常\',\'一般用戶\')

select distinct name,dbo.uf_test(name) from a_test

create function uf_test(@n varchar(30))
returns varchar(99)
as
begin
        declare cur_role2 cursor local for select role2 from a_test where name =@n
        declare @r varchar(30),@ret varchar(99)
    open cur_role2
    fetch cur_role2 into @r
        while @@fetch_status = 0
        begin
                if @ret is null
                        select @ret = @r
                else
                        select @ret = @ret + \',\' +@r
                fetch cur_role2 into @r
        end
    close cur_role2
        return @ret
end

论坛徽章:
0
6 [报告]
发表于 2004-03-22 22:24 |只看该作者
select name, min(role2) from a_test group by name

论坛徽章:
0
7 [报告]
发表于 2004-03-22 23:01 |只看该作者
最初由 jiangchuandong 发布
[B]select name, min(role2) from a_test group by name [/B]


没看清题意。

论坛徽章:
0
8 [报告]
发表于 2004-03-23 14:21 |只看该作者
create table a_test(name varchar(20),role2 varchar(20))
insert into a_test values(\'李\',\'管理員\')
insert into a_test values(\'張\',\'管理員\')
insert into a_test values(\'張\',\'一般用戶\')
insert into a_test values(\'常\',\'一般用戶\')

create function join_str(@content varchar(100))
returns varchar(2000)
as
begin
declare @str varchar(2000)
set @str=\'\'
select @str=@str+\',\'+rtrim(role2) from a_test where [name]=@content
select @str=right(@str,len(@str)-1)
return @str
end
go

--调用:
select [name],dbo.join_str([name]) role2 from a_test group by [name]

--select distinct name,dbo.uf_test(name) from a_test

论坛徽章:
0
9 [报告]
发表于 2004-03-23 19:54 |只看该作者

佩服楼上

这种特性是如何发现的?!高!!:right:

开始我也想用cursor看了你的帖子,一测试,靠,胜读半年贴!

:rose: :right: :right: :rose: :rose: :*_*: :*_*: :*_*:

论坛徽章:
0
10 [报告]
发表于 2004-03-23 20:07 |只看该作者

Re: 佩服楼上

最初由 wollaston 发布
[B]这种特性是如何发现的?!高!!:right:

开始我也想用cursor看了你的帖子,一测试,靠,胜读半年贴!

[/B]




:sweat2: 我是菜鸟,而且害羞。这样我会不好意思滴:shy2: 以后多多灌水
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP