一个数据表的统计法则,GROUP BY 上的一个简单操作问题

业余程序员 2006-11-23 05:34:41
我有一个表
AttemperTugboat[Unid int,AttemperUnid int,TugboatN0 nvarchar(10)]
Unid AttemperUnid TugboatNO
1 2 S1
2 2 S2
3 2 T5

4 3 T15
5 3 T19

6 6 S5
7 6 S8

现在我想做一个小运算 其想实现的结果是
AttemperUnid TugboatNOSum
2 S1,S2,T5
3 T15,T19
6 S5,S8

我不为写这个简单的运算语句,请达人帮忙
这个是我写的一个统计的语句,可是我不是想要多少个数,而是要TugboatNO里的内容组合在一起
Select AttemperUnid,Count(TugboatNo) from AttemperTugboat Group By AttemperUnid
...全文
169 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2006-11-23
  • 打赏
  • 举报
回复
--创建数据源
create table tb
(
Unid int,
AttemperUnid int,
TugboatNO varchar(10)
)
insert into tb(Unid,AttemperUnid,TugboatNO) values(1, 2, 'S1')
insert into tb(Unid,AttemperUnid,TugboatNO) values(2, 2, 'S2')
insert into tb(Unid,AttemperUnid,TugboatNO) values(3, 2, 'T5')
insert into tb(Unid,AttemperUnid,TugboatNO) values(4, 3, 'T15')
insert into tb(Unid,AttemperUnid,TugboatNO) values(5, 3, 'T18')
insert into tb(Unid,AttemperUnid,TugboatNO) values(6, 6, 'S5')
insert into tb(Unid,AttemperUnid,TugboatNO) values(7, 6, 'S8')
go

--创建一个合并的函数
create function f_hb(@AttemperUnid int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str = ''
select @str = @str + ',' + cast(TugboatNO as varchar) from tb where AttemperUnid = @AttemperUnid
set @str = right(@str , len(@str) - 1)
return(@str)
End
go

select distinct AttemperUnid ,dbo.f_hb(AttemperUnid) as TugboatNO from tb

drop table tb
drop function f_hb

AttemperUnid TugboatNO
------------ ---------
2 S1,S2,T5
3 T15,T18
6 S5,S8

(所影响的行数为 3 行)

gc_ding 2006-11-23
  • 打赏
  • 举报
回复
create function dbo.fn_Merge(@F1 int)
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select @r=@r+','+TugboatNO from AttemperTugboat where AttemperUnid=@F1
return stuff(@r,1,1,'')
end
go

-- 调用函数
select AttemperUnid, dbo.fn_Merge(AttemperUnid) as TugboatNO
from AttemperTugboat
group by AttemperUnid
go

drop table AttemperTugboat
drop function fn_Merge
gc_ding 2006-11-23
  • 打赏
  • 举报
回复
参考:
create table tbltest(列A int, 列B int,列C varchar(100))
go
insert into tbltest
select 1,1,'A' union all
select 1,1,'B' union all
select 1,1,'C' union all
select 1,2,'F' union all
select 1,2,'G' union all
select 2,1,'E' union all
select 2,1,'F' union all
select 2,2,'F'
go

--写一个聚合函数:
create function dbo.fn_Merge(@F1 int,@F2 int)
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select @r=@r+','+列C from tbltest where 列A=@F1 and 列B=@F2 -- 先加逗号,再串起来
return stuff(@r,1,1,'') -- 删除最前面加的逗号
end
go

-- 调用函数
select 列A,列B, dbo.fn_Merge(列A,列B) as 列C
from tbltest
group by 列A,列B
go

drop table tbltest
drop function fn_Merge

22,209

社区成员

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

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