导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

求高人解答sql语句问题!

fb13579 2008-01-11 04:37:34
客户表
字段:
客户名称 行业类型 客户类型
客户11 化工行业 大客户
客户12 化工行业 大客户
客户21 化工行业 小客户
客户22 化工行业 小客户
客户31 纺织行业 大客户
客户32 纺织行业 大客户
客户41 纺织行业 小客户
客户42 纺织行业 小客户

我想查询得出如下结果
字段1 字段2 字段3
化工行业 大客户 客户11、客户12
化工行业 小客户 客户21、客户22
纺织行业 大客户 客户31、客户32
纺织行业 小客户 客户41、客户42

单纯用一个sql语句可以实现吗?



...全文
85 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
JL99000 2008-01-11
if object_id('tb') is not null
drop table tb
if object_id('f_getname') is not null
drop function f_getname
go
create table tb(客户名称 varchar(20),行业类型 varchar(20),客户类型 varchar(20))
insert tb
select '客户11','化工行业','大客户' union all
select '客户12','化工行业','大客户' union all
select '客户21','化工行业','小客户' union all
select '客户22','化工行业','小客户' union all
select '客户31','纺织行业','大客户' union all
select '客户32','纺织行业','大客户' union all
select '客户41','纺织行业','小客户' union all
select '客户42','纺织行业','小客户'
select * from tb
go
create function f_getname(@hangye varchar(20),@kehu varchar(20))
returns varchar(100)
as
begin
declare @s varchar(100)
select @s=isnull(@s,'')+客户名称+',' from tb where 行业类型=@hangye and 客户类型=@kehu
set @s=substring(@s,1,len(@s)-1)
return @s
end
go
select 行业类型 as 字段1,客户类型 as 字段2,dbo.f_getname(行业类型,客户类型) as 字段3 from tb
group by 行业类型,客户类型

楼主 接分了
回复
fb13579 2008-01-11
select 行业类型,客户类型,max(客户名称)+','+min(客户名称) from 客户表 group by 行业类型,客户类型
这句话,不靠谱,虽然有点那个意思~~
回复
架构之路 2008-01-11
同意

select 行业类型,客户类型,max(客户名称)+','+min(客户名称) from 客户表 group by 行业类型,客户类型
回复
wzy_love_sly 2008-01-11
不定,还要不写函数,应该不能。
老大的字符拆分都标明
1每组 <=2 条记录的合并
2每组 <=3 条记录的合并
没见写个语句的
回复
fb13579 2008-01-11
嗯~~~忽然想到了~~特此来问问~~虽然用很多方式都能解决这个问题~~呵呵~~期待高手解决
回复
wyb0026 2008-01-11
我感觉没有,如果有麻烦告诉我一声 wyb0026@163.com 这里先谢过了
回复
free1879 2008-01-11
动态SQL
回复
fb13579 2008-01-11
呵呵,我就是问问,有没有类似下面这样的语句
select 行业类型,客户类型,max(客户名称)+','+min(客户名称) from 客户表 group by 行业类型,客户类型

记录数目未知,上面这句话是不是只能拼2个,如果多个怎么办?
回复
free1879 2008-01-11
同意 天使赶不走
这样更符合他的要求

select 行业类型,客户类型,max(客户名称)+','+min(客户名称) from 客户表 group by 客户类型,行业类型
回复
月下之木 2008-01-11
函数和你有仇呵呵
回复
fb13579 2008-01-11
除了函数,是否直接用sql语句是不可能的吧~~~
回复
月下之木 2008-01-11

create table 客户表
(
客户名称 varchar (20),
行业类型 varchar(20),
客户类型 varchar(20)
)

insert into 客户表 select '客户11','化工行业','大客户'
union all select '客户12','化工行业','大客户'
union all select '客户21','化工行业','小客户'
union all select '客户22','化工行业','小客户'
union all select '客户31','纺织行业','大客户'
union all select '客户32','纺织行业','大客户'
union all select '客户41','纺织行业','小客户'
union all select '客户42','纺织行业','小客户'
go

select 行业类型,客户类型,max(客户名称)+','+min(客户名称) from 客户表 group by 行业类型,客户类型

回复
子陌红尘 2008-01-11
参考:


--生成测试数据
create table 表(部门 int,人员 varchar(20))
insert into 表 select 1,'张三'
insert into 表 select 1,'李四'
insert into 表 select 1,'王五'
insert into 表 select 2,'赵六'
insert into 表 select 2,'邓七'
insert into 表 select 2,'刘八'
go

--创建用户定义函数
create function f_str(@department int)
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+','+人员 from 表 where 部门 = @department
set @ret = stuff(@ret,1,1,'')
return @ret
end
go


--执行
select 部门,人员=dbo.f_str(部门) from 表 group by 部门 order by 部门
go

--输出结果
/*
部门 人员
---- --------------
1 张三,李四,王五
2 赵六,邓七,刘八
*/


--删除测试数据
drop function f_str
drop table 表
go
回复
wyb0026 2008-01-11
好像得写一个函数 变成 "客户41、客户42"
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告