字符串累加计算

rgh_good 2010-08-02 09:50:25
Table数据
字段A 字段B 字段C
-----------------------------
A A_A 1
A A_A 2
A A_B 1
B B_A 1
B B_A 2
B B_A 3
B B_B 1
B B_B 2
B B_C 3

输出结果
字段A 字段B 字段C
------------------------------
A A_A 1_2
A A_B 1
B B_A 1_2_3
B B_B 1_2
B B_C 3

不使用循环,T-SQL怎么写???
...全文
209 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
百年树人 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 rgh_good 的回复:]
这些都是2005的写法,不使用 For XML,不使用函数,怎么写,用2000的写法
[/Quote]

参考5楼,用函数
rgh_good 2010-08-03
  • 打赏
  • 举报
回复
这些都是2005的写法,不使用 For XML,不使用函数,怎么写,用2000的写法
rgh_good 2010-08-03
  • 打赏
  • 举报
回复
不使用函数
sean_zhou 2010-08-02
  • 打赏
  • 举报
回复
试试for xml path 呵呵,这个不错,也是跟CSDN上朋友学的。
百年树人 2010-08-02
  • 打赏
  • 举报
回复
sql2000的用函数
---创建字符连接函数---
create function [dbo].[f_str](@a varchar(20),@b varchar(20))
returns varchar(50)
as
begin
declare @s varchar(800)
select @s=isnull(@s+'_','')+ltrim(c)
from tb
where a=@a and b=@b
return @s
end

---查询---
select a,b,dbo.f_str(a,b) as c from tb group by a,b

---结果---
a b c
---- ---- --------------------------------------------------
A A_A 1_2
A A_B 1
B B_A 1_2_3
B B_B 1_2
B B_C 3

(5 行受影响)

百年树人 2010-08-02
  • 打赏
  • 举报
回复
---测试数据---
if object_id('[TB]') is not null drop table [TB]
go
create table [TB]([A] varchar(1),[B] varchar(3),[C] int)
insert [TB]
select 'A','A_A',1 union all
select 'A','A_A',2 union all
select 'A','A_B',1 union all
select 'B','B_A',1 union all
select 'B','B_A',2 union all
select 'B','B_A',3 union all
select 'B','B_B',1 union all
select 'B','B_B',2 union all
select 'B','B_C',3

---查询---
SELECT A,B,
C=STUFF((SELECT '_'+LTRIM(C) FROM TB WHERE A=T.A AND B=T.B FOR XML PATH('')),1,1,'')
FROM TB T
GROUP BY A,B


---结果---
A B C
---- ---- -------------
A A_A 1_2
A A_B 1
B B_A 1_2_3
B B_B 1_2
B B_C 3

(5 行受影响)
SQLCenter 2010-08-02
  • 打赏
  • 举报
回复
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(字段A varchar(8), 字段B varchar(8), 字段C int)
insert into #
select 'A', 'A_A', 1 union all
select 'A', 'A_A', 2 union all
select 'A', 'A_B', 1 union all
select 'B', 'B_A', 1 union all
select 'B', 'B_A', 2 union all
select 'B', 'B_A', 3 union all
select 'B', 'B_B', 1 union all
select 'B', 'B_B', 2 union all
select 'B', 'B_C', 3
go

select 字段A, 字段B, 字段C = stuff((select '_' + rtrim(字段C) as [text()] from # where 字段A = a.字段A and 字段B = a.字段B for xml path('')) , 1, 1, '') from # as a group by 字段A, 字段B
/*
字段A 字段B 字段C
-------- -------- --------
A A_A 1_2
A A_B 1
B B_A 1_2_3
B B_B 1_2
B B_C 3
*/
go
黄_瓜 2010-08-02
  • 打赏
  • 举报
回复
select 
字段A ,字段B ,
字段C=stuff((select '_'+字段C from tb where 字段A=t.字段A and 字段B=t.字段B for xml path('')),1,1,'')
from
tb t
group by
字段A ,字段B
黄_瓜 2010-08-02
  • 打赏
  • 举报
回复
可能只有xml 的不算是循环吧?
不过不知道你的版本够高不?
select 
字段A ,字段B ,
字段C=stuff((select ','+字段C from tb where 字段A=t.字段A and 字段B=t.字段B for xml path('')),1,1,'')
from
tb t
group by
字段A ,字段B

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧