SQL查询语句 group by后, 字符串合并

原文:SQL查询语句 group by后, 字符串合并

合并列值
--*******************************************************************************************
表结构,数据如下:
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. 旧的解决方法(在sql server 2000中只能用函数解决。)
--=============================================================================
create table tb(id int, value varchar(10))
insert into tb values(1, ‘aa‘)
insert into tb values(1, ‘bb‘)
insert into tb values(2, ‘aaa‘)
insert into tb values(2, ‘bbb‘)
insert into tb values(2, ‘ccc‘)
go
--1. 创建处理函数
CREATE FUNCTION dbo.f_strUnite(@id int)
RETURNS varchar(8000)
AS
BEGIN
    DECLARE @str varchar(8000)
    SET @str = ‘‘
    SELECT @str = @str + ‘,‘ + value FROM tb WHERE id=@id
    RETURN STUFF(@str, 1, 1, ‘‘)
END
GO
-- 调用函数
SELECt id, value = dbo.f_strUnite(id) FROM tb GROUP BY id
drop table tb
drop function dbo.f_strUnite
go
/*
id          value
----------- -----------
1          aa,bb
2          aaa,bbb,ccc
(所影响的行数为 2 行)
*/
--===================================================================================
2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。)
create table tb(id int, value varchar(10))
insert into tb values(1, ‘aa‘)
insert into tb values(1, ‘bb‘)
insert into tb values(2, ‘aaa‘)
insert into tb values(2, ‘bbb‘)
insert into tb values(2, ‘ccc‘)
go
-- 查询处理
SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY(
        SELECT [values]= STUFF(REPLACE(REPLACE(
            (
                SELECT value FROM tb N
                WHERE id = A.id
                FOR XML AUTO
            ), ‘ <N value="‘, ‘,‘), ‘"/>‘, ‘‘), 1, 1, ‘‘)
)N
drop table tb 

/*
id          values
----------- -----------
1          aa,bb
2          aaa,bbb,ccc 

(2 行受影响)
*/ 

--SQL2005中的方法2
create table tb(id int, value varchar(10))
insert into tb values(1, ‘aa‘)
insert into tb values(1, ‘bb‘)
insert into tb values(2, ‘aaa‘)
insert into tb values(2, ‘bbb‘)
insert into tb values(2, ‘ccc‘)
go 

select id, [values]=stuff((select ‘,‘+[value] from tb t where id=tb.id for xml path(‘‘)), 1, 1, ‘‘)
from tb
group by id 

/*
id          values
----------- --------------------
1          aa,bb
2          aaa,bbb,ccc 

(2 row(s) affected) 

*/ 

demo:

select
  BeginCity,EndCity,FanDian,
     [CangWei]=stuff((select ‘/‘+[CangWei] from test1 t
     where t.BeginCity=Test1.BeginCity  and t.EndCity=Test1.EndCity  and t.FanDian=Test1.FanDian
     for xml path(‘‘)), 1, 1, ‘‘)
from
Test1
group by
BeginCity,EndCity,FanDian
  

参考:  http://bbs.csdn.net/topics/330188225

http://bbs.csdn.net/topics/330182340

时间: 2024-10-02 10:56:17

SQL查询语句 group by后, 字符串合并的相关文章

(转)经典SQL查询语句大全

一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack 4.说明:创建

经典SQL查询语句大全

一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'--- 开始 备份BACKUP DATABASE pubs TO testBack4.说明:创建新表create ta

SQL查询语句大全(转)

转自https://www.cnblogs.com/chenglc/p/8421492.html 重点参考https://blog.csdn.net/g1418377085/article/details/77504076/ 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevi

15个初学者必看的基础SQL查询语句

本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插入SQL 我们在开始创建数据表和向表中插入演示数据之前,我想给大家解释一下实时数据表的设计理念,这样也许能帮助大家能更好的理解SQL查询. 在数据库设计中,有一条非常重要的规则就是要正确建立主键和外键的关系. 现在我们来创建几个餐厅订单管理的数据表,一共用到3张数据表,Item Master表.Order Master表和Order Detail表. 创建表: 创建Item Maste

浅谈SQL优化入门:1、SQL查询语句的执行顺序

1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (6) HAVING <having_

SQL 查询语句总结

ps:老本行,复习一下 SQL 查询语句总结 列名 Select Sname AS 姓名 from Student; ·这里AS可以省略. 去重:distinct Select distinctSno from sc; WHERE条件查询 比较               =/>/</>=/<= 确定范围        between - and -/notbetween - and - 确定集合        IN/NOT IN 字符匹配        LIKE/NOT LIKE

sql查询语句示例

今天没事又专门学习了一下sql查询语句,个人感觉太重要了,于是就找了网上的一个示例自己练了起来,感觉学到了很多,下面跟大家分享一下sql查询语句的示例操作. 首先,我建了5张表,分别如下: (a)学生表 STUDENTS: (b)成绩表 ENROLLS: (c)课程表 COURSES: (d)教师表 TEACHERS: (e)任课表 TEACHING: 以下是一些查询的sql语句,由简单到复杂 表操作 1. 根据 STUDENTS 表,建立一个只包含学号.姓名.年龄的女学生表. 视图操作 2. 

SQL查询语句 [2]

一.快捷查询 快捷查询方式是一种多字段查询的简化写法,在多个字段之间用'|'隔开表示OR,用'&'隔开表示 AND. 1.不同字段相同查询条件 在  Home/controller/UserController.class.php   中插入 //使用相同查询条件 $user = M('User'); $map['user|email'] = '蜡笔小新'; //'|'换成'&'变成AND var_dump($user->where($map)->select()); 这时在浏

一条SQL查询语句是如何执行的

一条SQL查询语句是如何执行的 下面是MySql的基本架构示意图,从图中可以清楚地看到SQL语句在MySQL的各个功能模块中的执行过程. 大体来讲,MySQL可以分为Server层和存储引擎层两部分. Server层 Server层包括连接器.查询缓存.分析器.优化器.执行器等,涵盖了MySql的大多数核心服务功能以及所有的内置函数,所有跨存储引擎的功能都在这一层实现,比如存储过程.触发器.视图等. 存储引擎层 而存储引擎层负责数据的存储与提取.其架构模式是插件式的,支持InnoDB.MyISA