注册 登录
编程论坛 SQL Server论坛

sql 查询语句 多列内容 显示在一个单元格内

Icer51 发布于 2010-11-19 15:06, 1918 次点击
案例:
原数据:
NO   a     b
 1   123   12301
 2   123   12302
 3   123   12303
 4   456   45601
 5   456   45602
用查询语句 后显示成为:
NO    a    b
1    123  12301,12302,12303
2    456  45601,45602
13 回复
#2
Icer512010-11-19 15:07
高手 帮忙弄下 问了好多人了 搞的头都大了 这个语句在sqlserver 2005中执行
#3
Icer512010-11-19 15:40
是这个问题太简单了 还是我问的不清楚 有会的帮忙解决下 谢谢  我sql菜鸟级 不胜感谢
#4
Icer512010-11-19 15:46
忘了说了 a 是主表的列 b是附表的列  
#5
aei1352010-11-19 15:51
参考这个,不过是SQL SERVER 2000中的
create function f_test(@订单编号 varchar(100))
returns varchar(8000)
as
begin
declare @参与人员 varchar(8000)
select @参与人员=isnull(@参与人员+',','')+人员
from test where 订单编号=@订单编号
return @参与人员
end

select distinct 订单编号,dbo.f_test(订单编号) from test
#6
njy230002010-11-19 15:52
如果是不确定数量的项目,必须通过存储过程解决:查询记录,循环连接;
如果是确定数量的项目,可以通过确定的参数,通过嵌套查询或是联合查询来解决。
#7
njy230002010-11-19 15:54
回复 5楼 aei135
蝙蝠侠,看看我的问题,能解决吗?

请教同组物品查询的方法-我只发难题
Create  TABLE MAIN.[object_group](
[object_title] varchar(50)
,[object_para] varchar(50)
,[group_title] varchar(50)
,[group_value] varchar(50)
, Primary Key(object_title,object_para,group_title,group_value)   
);

Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("桌子","红木八仙桌","品种","家具");
Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("桌子","红木八仙桌","材质","红木");
Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("桌子","红木八仙桌","包装","一类包装-大");
Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("茶几","红木几","品种","家具");
Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("茶几","红木几","材质","红木");
Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("茶几","红木几","包装","二类包装-中");
Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("桌子","平头案","品种","家具");
Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("桌子","平头案","材质","梨花木");
Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("桌子","平头案","包装","一类包装-大");
Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("椅子","电脑转椅","品种","办公");
Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("椅子","电脑转椅","包装","二类包装-中");
Insert  Into [object_group] ([object_title],[object_para],[group_title],[group_value]) Values("椅子","电脑转椅","材质","革");


[object_title] 对象名称
[object_para] 对象参数
[group_title] 组名称
[group_value] 组取值

求查询语句写法:
输入:对象名称,对象参数
输出:和输入对象至少具有两个相同组名称和组取值的其他对象列表
通俗讲,就是:至少有两个分类定义相同的其他物品

也可以扩充为:有若干个分类定义相同

[ 本帖最后由 njy23000 于 2010-11-19 15:56 编辑 ]
#8
Icer512010-11-19 16:02
数量是不确定 5楼的大哥 我刚才试过了 我没弄出来 哎
这个语句是为了做报表 用的 希望 用查询语句 解决
如果有个 类似的 案例也行 我试试弄 哎 现在搞得 头都大了 蒙住了
我sql太差了
#9
aei1352010-11-19 17:20
这个2000的除了函数还可以用游标了,不知道你能不能接受
#10
njy230002010-11-20 09:56
回复 8楼 Icer51
数量不确定,只能用存储过程或函数解决。
直接的查询语句不支持。
#11
aei1352010-11-20 22:21
你的NO是行数的意思啊?才发现不太对
#12
Icer512010-11-22 10:15
回复 10楼 njy23000
您能帮我做个范例么 最好这个函数 在sql sever 2005可以用
#13
Icer512010-11-22 10:32
回复 9楼 aei135
可以 只要用sql语句 能出来就行 但是唯一的要求就是能在2005sqlsever能够运行
#14
aei1352010-11-22 15:20
这个你试下看行不了
declare @b varchar(2000)
declare @temp table(no int identity(1,1),a varchar(10),b varchar(1000))
declare @a varchar(10)
declare cr cursor for
select distinct a from abc
open cr
fetch next from cr
into @a
while @@fetch_status=0
begin
   set @b=''
   select @b=@b+','+b from abc where a=@a
   insert into @temp(a,b)
   select @a,stuff(@b,1,1,'')
   fetch next from cr
   into @a
end
close cr
deallocate cr
select * from @temp
1