现有表如下
SN Value
1 a
2 b
3 c
4 d
...
...
25 y
26 z
以上一共26个字母,即26条记录,如何按照规定的数量合并显示呢?
如现在要求按照5个数字为一组的方式进行合并显示
SN Value
1 a;b;c;d;e
2 f;g;h;i;j
3 k;l;m;n;o
4 p;q;r;s;t
5 u;v;w;x;y
6 z
请高手帮助,谢谢。
------解决方案--------------------
select sn/5,fun_test(sn/5)
from tb
group by sn/5
create fun_test(@id)
returns varchar(100)
as
begin
declare @temp varchar(100)
set @temp =''
select @[email protected] + value from tb where [email protected]
return @temp
end
------解决方案--------------------
- SQL code
declare @n int;set @n=5;;with cte as( select SN,Value,rn=(SN-1)[email protected] from tb ),cte2 as( select distinct value=stuff((select ';'+value from cte where c.rn=rn order by SN for xml path('')),1,1,''),c.rn from cte c )select SN=row_number()over(order by rn),value from cte2;
------解决方案--------------------
- SQL code
纸种 规格 重量 仿牛卡 1200*1100 1.1 仿牛卡 1200*1100 1.2 仿牛卡 1200*1100 1.3 仿牛卡 1200*1100 1.4 仿牛卡 1200*1100 1.5 仿牛卡 1200*1100 1.1 仿牛卡 1200*1100 1.2 高瓦 1200*1200 1.3 高瓦 1200*1200 1.3 高瓦 1200*1200 1.3 能不能通过SQL 语句得到以下统计出来的结果: 仿牛卡 1200*1100 1.1 1.2 1.3 1.4 1.5 5件 仿牛卡 1200*1100 1.1 1.2 2件 高瓦 1200*1200 1.3 1.3 1.3 3件 其中第一行与第二行是相等的,只是在打印的时候,如果把第二行都统计到第一行太长了,打印纸打印不下。 把原来的七条拆分成两行,5个记录一行。 -------------------------------------- Author : HappyFlyStone -- Date : 2009-10-22 -- Version: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86) -- Apr 14 2006 01:12:25 -- Copyright (c) 1988-2005 Microsoft Corporation-- Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)-- -------------------------------------- Test Data: taIF OBJECT_ID('[ta]') IS NOT NULL DROP TABLE [ta]GoCREATE TABLE ta([纸种] NVARCHAR(3),[规格] NVARCHAR(9),[重量] NUMERIC(2,1))GoINSERT INTO ta SELECT '仿牛卡','1200*1100',1.1 UNION ALL SELECT '仿牛卡','1200*1100',1.2 UNION ALL SELECT '仿牛卡','1200*1100',1.3 UNION ALL SELECT '仿牛卡','1200*1100',1.4 UNION ALL SELECT '仿牛卡','1200*1100',1.5 UNION ALL SELECT '仿牛卡','1200*1100',1.1 UNION ALL SELECT '仿牛卡','1200*1100',1.2 UNION ALL SELECT '高瓦','1200*1200',1.3 UNION ALL SELECT '高瓦','1200*1200',1.3 UNION ALL SELECT '高瓦','1200*1200',1.3 GO--Startalter table ta add col int default 0goif object_id('F_Str11') is not null drop function F_Str11 go create function F_Str11(@Col varchar(10),@col1 int) returns nvarchar(100) as begin declare @S nvarchar(100) select @S=isnull(@S+',','')+ltrim(重量) from ta where [email protected] and col = @col1 return @S end go declare @i int ,@j varchar(10)set @i = 0update taset col = (@I-1)/5,@I = case when @j <> [纸种] then 1 else @i + 1 end, @j = [纸种]select 纸种,规格,dbo.f_str11(纸种,col) from tagroup by 纸种,规格,col --Result:/*纸种 规格 ---- --------- ------------------------仿牛卡 1200*1100 1.1,1.2,1.3,1.4,1.5仿牛卡 1200*1100 1.1,1.2高瓦 1200*1200 1.3,1.3,1.3(3 行受影响)*/--End
------解决方案--------------------
- SQL code
declare @n int;set @n=5;;with cte as( select SN,Value,rn=(SN-1)[email protected] from tb ),cte2 as( select distinct value=stuff((select ';'+value from cte where c.rn=rn order by SN for xml path('')),1,1,''),c.rn----字符串的合并 用XMML 建议去看看XML语法 from cte c )select SN=row_number()over(order by rn),value from cte2;