当前位置: 代码迷 >> Sql Server >> 查询方法:多条记录按规定数量合并显示如何实现
  详细解决方案

查询方法:多条记录按规定数量合并显示如何实现

热度:234   发布时间:2016-04-27 12:33:16.0
查询方法:多条记录按规定数量合并显示怎么实现?
现有表如下

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;