日期:2014-05-18 浏览次数:20758 次
--不用游标 create table test1 (equimentid int,errocode varchar(10)) insert into test1(equimentid,errocode) values(1,'123') insert into test1(equimentid,errocode) values(1,'43') insert into test1(equimentid,errocode) values(1,'567') insert into test1(equimentid,errocode) values(2,'123') insert into test1(equimentid,errocode) values(2,'563') insert into test1(equimentid,errocode) values(3,'63') create function fn_showstring(@id int) returns varchar(100) as begin declare @sql varchar(100) set @sql='' select @sql=@sql+errocode+',' from test1 where equimentid=@id return @sql end select equimentid,dbo.fn_showstring(equimentid) errorcode from test1 group by equimentid
------解决方案--------------------
游标使用的例子,供参考:
--> 构造测试数据
declare @tb table(pname varchar(50))
insert @tb
select '电视机' union all
select '电冰箱' union all
select '洗衣机' union all
select '空调' union all
select '微波炉'
--> 游标的使用
declare my_cursor cursor scroll dynamic
for
select pname from @tb
open my_cursor
declare @pname sysname
fetch next from my_cursor into @pname
while(@@fetch_status=0)
begin
print 'Product Name: ' + @pname
fetch next from my_cursor into @pname
end
fetch first from my_cursor into @pname
close my_cursor
deallocate my_cursor
--> 结果
/**
Product Name: 电视机
Product Name: 电冰箱
Product Name: 洗衣机
Product Name: 空调
Product Name: 微波炉
**/
------解决方案--------------------
IF OBJECT_ID('tempdb..#temp', 'u') IS NOT NULL
DROP TABLE #temp
GO
CREATE TABLE #temp
(
id INT,
[date] NVARCHAR(10)
)
INSERT #temp
select '1444', N'1日' union all
select '1472', N'1日' union all
select '1472', N'2日' union all
select '1716', N'1日' union all
select '1816', N'1日'
GO
--SQL:
SELECT
id,
[date]=STUFF((SELECT ','+[date] FROM #temp WHERE id=t.id FOR XML PATH('')),1,1,'')
FROM #temp t
GROUP BY id
--RESULT:
/*
id date
1444 1日
1472 1日,2日
1716 1日
1816 1日
*/