表:productname color
A red
A blue
b yellow
........
显示如下结果name color
A red,blue
b yellow
.....
要求不用临时表和中间变量
A red
A blue
b yellow
........
显示如下结果name color
A red,blue
b yellow
.....
要求不用临时表和中间变量
解决方案 »
- 有DELPHI2009后如何再装DELPHI2010
- buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2)));请高手帮忙!
- 如何在一个自己定义的函数(单元文件)中调用其它窗体中的组件?????有急用!大家帮帮忙!
- 我把一个form加到dpk中,How调用dpk包中的form?
- 主从表更新失败,主表主键为autoinc类型
- 求版主别删除!我要去应聘计算机系统管理员,他们可能会问什么问题?他们的要求如下:
- 我要把对数据库表的操作写个操作日志怎么做!!呀帮帮忙
- 关于数据文件保存问题(最好不用数据库),请讨论,帮忙解决
- 如何在一个表里面同时查询两个列的数据?
- 怎样调用VC++作的DLL!
- Delphi WebService 难带对C#的Binary序列化后的字节数组 就一点没有办法吗
- Delphi写了个程序,打开程序显示窗口慢,原因是先激活一个函数,函数完成才能显示窗体,如何能先显示窗体再操作函数工作,望有大大帮解决
as
begin
declare @str varchar(1000)
set @str = ''
select @str = @str + ',' + cast(value as varchar) from tb where id = @id
set @str = right(@str , len(@str) - 1)
return @str
end
go--调用函数
select name , value = dbo.f_str(name) from tb group by name
用程序来控制数据逻辑,而不依赖SQL语法来处理,一个很复杂的SQL处理在程序内简单的代码就可以处理,也较少了后续维护的复杂性。
case when count(color)=1 then substr(max(color),2) else max(color) end 是为了解决一种情况:如果有一个分组只有一行,那么查询出来的color字段前会有个逗号问题
select name,
case when count(color)=1 then substr(max(color),2) else max(color) end color
from (select name,concat(concat(lag(color)over(partition by name order by color ),','),color)as color
from (select * from test_a group by name,color) )
group by nameNAME COLOR
A blue,red
B yellow楼主测试下
Select T1.Name, Substr(Max(Sys_Connect_By_Path(T1.Color, ',')), 2) Color
From (Select a.Name, a.Color, Row_Number() Over(Partition By a.Name Order By a.Color) Rn From (select * from test_a group by name,color) a) T1
Start With T1.Rn = 1
Connect By T1.Name = Prior T1.Name And T1.Rn - 1 = Prior T1.Rn
Group By T1.Name;