【交流】SQL 2005溢用之:合并列值

原创 2006年06月09日 20:31:00

问题描述:

无论是在sql 2000 还是在 sql 2005 中,都没有提供字符串的聚合函数, 所以, 当我们在处理下列要求时,会比较麻烦:

 

有表tb, 如下:

id    value

----- ------

1     aa

1     bb

2     aaa

2     bbb

2     ccc

 

需要得到结果:

id     values

------ -----------

1      aa,bb

2      aaa,bbb,ccc

 

即, group by id, value 的和(字符串相加)

 

1. 旧的解决方法

-- 1. 创建处理函数

CREATE FUNCTION dbo.f_str(@id int)

RETURNS varchar(8000)

AS

BEGIN

    DECLARE @r varchar(8000)

    SET @r = ''

    SELECT @r = @r + ',' + value

    FROM tb

    WHERE id=@id

    RETURN STUFF(@r, 1, 1, '')

END

GO

 

-- 调用函数

SELECt id, values=dbo.f_str(id)

FROM tb

GROUP BY id

 

-- 2. 新的解决方法

-- 示例数据

DECLARE @t TABLE(id int, value varchar(10))

INSERT @t SELECT 1, 'aa'

UNION ALL SELECT 1, 'bb'

UNION ALL SELECT 2, 'aaa'

UNION ALL SELECT 2, 'bbb'

UNION ALL SELECT 2, 'ccc'

 

-- 查询处理

SELECT *

FROM(

    SELECT DISTINCT

        id

    FROM @t

)A

OUTER APPLY(

    SELECT

        [values]= STUFF(REPLACE(REPLACE(

            (

                SELECT value FROM @t N

                WHERE id = A.id

                FOR XML AUTO

            ), '<N value="', ','), '"/>', ''), 1, 1, '')

)N

 

/*--结果

id          values

----------- ----------------

1           aa,bb

2           aaa,bbb,ccc

 

(2 行受影响)

--*/

CSDN 社区帖子地址

 

合并与分拆的CLR sql2005的示例中有:
在安装sql 2005的示例后,默认安装目录为 drive:/Program Files/Microsoft SQL Server/90/Samples/Engine/Programmability/CLR/StringUtilities

 

SQL Server合并列值

说明:由于考勤系统中出来的打卡记录是按照工号,打卡日期,打卡时间以行的方式来显示的,现在需要按照工号,打卡日期来整理每个人每天的打卡时间 原格式: 整理后格式: 数据库表结构如下: C...
  • mangkata
  • mangkata
  • 2016年09月18日 14:08
  • 499

SQL将一行多列数据合并成 一列

由于最近在做项目的时候,要对数据库中一行很多列个数据进行求和,便在网上查了一下,首先要用到动态SQL语句,动态sql感觉就是类似于拼接sql字符串 动态语句基本语法 1 :普通SQL语句可以用ex...
  • dream_follower
  • dream_follower
  • 2016年08月19日 12:39
  • 7173

SQL行列转换-合并列值(示例)

/*需求: 合并列值. 无论是在sql 2000, 还是在 sql 2005 中,都没有提供字符串的聚合函数,  所以, 当我们在处理下列要求时,会比较麻烦:表数据: id    value...
  • Mr_Data_Mining
  • Mr_Data_Mining
  • 2013年03月15日 14:44
  • 1459

分别使用函数及游标实现SQL多行转一列(文本合并)

分别使用函数及游标实现SQL多行转一列 有时候在一些系统中我们需要用SQL语句将一对多关系表中的数据以每条记录一行的形式进行显示。本文分别采用函数及游标的方法来实现该功能。 示例表描述如下 ...
  • mfkpie
  • mfkpie
  • 2013年11月22日 23:04
  • 1624

分享一下jqgrid合并单元格

原文:http://bbs.blueidea.com/thread-3067461-1-1.html Merger这个方法大家可以直接调用 里边都不用修改  参数1为jqgrid的id  参...
  • wd4java
  • wd4java
  • 2017年01月03日 10:08
  • 5008

datagrid的合并单元格(合并行、并列)

并列很简单: columns:[[         {field:'examId',title:'批次',width:150,align:'center',rowspan:2,     ...
  • hulufeng1203
  • hulufeng1203
  • 2014年03月03日 20:39
  • 1910

SQL 合并列值 拆分列值 拼接字符串

SQL STUFF函数 拼接字符串数据库设计 数据库数据展示 期望效果 create table tb(idint, value varchar(10))insert into tbva...
  • Sunny_Ran
  • Sunny_Ran
  • 2016年08月22日 14:51
  • 652

oracle 多个查询语句结果列合并

1.oracle 多个查询语句结果合并 在开发环境中遇到这样关于数据库的问题 有三个不同的查询语句  1:  select year_mon,sum(gasmon)  from a  ...
  • xyr05288
  • xyr05288
  • 2015年05月27日 18:47
  • 1905

Easyui+Spring Mvc导出Excel:支持按模板样式导出、合并表头、合并单元格、多sheet

转自:http://bbs.jeasyuicn.com/thread-328-1-1.html 群上常有人在问datagrid怎么导出到excel。其实导出可以分两种,一种是直接将页面的数据导出...
  • bruceoyqq
  • bruceoyqq
  • 2013年12月03日 13:01
  • 11115

poi excel单元格合并

sheet.addMergedRegion(new CellRangeAddress(oldValue, newValue, 0, 0)); CellRangeAddress有4个参数:起始...
  • qq_33212500
  • qq_33212500
  • 2017年06月20日 11:22
  • 242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【交流】SQL 2005溢用之:合并列值
举报原因:
原因补充:

(最多只允许输入30个字)