日期:2014-05-18  浏览次数:20544 次

關於分組後各個字段連接的問題
CREATE   TABLE   [TEST2]   (
[p_no]   [varchar]   (12)     NOT   NULL   ,
[mno]   [varchar]   (12)     NULL   ,
[p_fee]   [numeric](9,   2)   NULL   ,
)   ON   [PRIMARY]
GO

INSERT   INTO   [PeoEduLT].[dbo].[TEST2]([p_no],   [mno],   [p_fee])
VALUES( '2007060009 ', '000012 ', '500 ')
INSERT   INTO   [PeoEduLT].[dbo].[TEST2]([p_no],   [mno],   [p_fee])
VALUES( '2007060009 ', '000010 ', '50 ')

結果:
-------------------------
p_no                     mno                                   p_fee
2007060009         000012,000010               550
-------------------------
不要用遊標,盡量不要臨時表,請幫忙!

------解决方案--------------------
参考:

http://community.csdn.net/Expert/topic/5584/5584268.xml?temp=.9655573
------解决方案--------------------
--生成测试数据
CREATE TABLE [TEST2] (
[p_no] [varchar] (12) NOT NULL ,
[mno] [varchar] (12) NULL ,
[p_fee] [numeric](9, 2) NULL ,
)
GO

INSERT INTO [TEST2] VALUES( '2007060009 ', '000012 ', '500 ')
INSERT INTO [TEST2] VALUES( '2007060009 ', '000010 ', '50 ')
go

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

--执行
select p_no,mno=dbo.f_str(p_no),sum(p_fee) as p_fee from TEST2 group by p_no
go


--输出结果
/*
p_no mno p_fee
------------ ------------------- --------
2007060009 000012,000010 550.00
*/

--删除测试数据
drop function f_str
drop table TEST2
go

------解决方案--------------------
CREATE TABLE [TEST2] (
[p_no] [varchar] (12) NOT NULL ,
[mno] [varchar] (12) NULL ,
[p_fee] [numeric](9, 2) NULL ,
) ON [PRIMARY]
GO

INSERT INTO [dbo].[TEST2]([p_no], [mno], [p_fee])
VALUES( '2007060009 ', '000012 ', '500 ')
INSERT INTO [dbo].[TEST2]([p_no], [mno], [p_fee])
VALUES( '2007060009 ', '000010 ', '50 ')
GO
Create Function F_Getmno(@p_no varchar (12))
Returns Varchar(8000)
As
Begin
Declare @S Varchar(8000)
Select @S = ' '
Select @S = @S + ', ' + mno From TEST2 Where p_no = @p_no
Return (Right(@S, Len(@S) - 1))
End
GO
Select
p_no,
dbo.F_Getmno(p_no) As mno,
SUM(p_fee) As p_fee
From
TEST2
Group By
p_no
GO
Drop Table TEST2
Drop Function F_Getmno
--Result
/*
p_no mno p_fee
2007060009 000012,000010 550.00
*/

------解决方案--------------------
方法差不多,不過函數內部有少許區別。

寫出來了,就貼出來算了。