T SQL 将一列多行数据合并为一行

  SQL Server 在进行数据迁移和报表处理的时候遇到将一列多行数据拼接为一个字符串的情形,查找相关的资料整理如下,提供两种方法。

  Table:SC


Student


Course


张三


大学语文


李四


大学语文


张三


书法鉴赏


张三


音乐欣赏


李四


电影赏析

  期望得到的结果:


Student


Course


张三


大学语文,书法鉴赏,音乐欣赏


李四


大学语文,电影赏析

  一、用户自定义函数

CREATE FUNCTION FN_Merge (@Student NVARCHAR(50))
RETURNS NVARCHAR(50)
AS
      BEGIN
            DECLARE @Course NVARCHAR(50)
            SELECT @Course = ISNULL(@Course + ‘,‘,‘‘) + @Course
            FROM SC
            WHERE Student = @Student
            RETURN @COURSE
     END

SELECT DISTINCT [Student],dbo.FN_Merge([Student]) AS Course
FROM [dbo].[SC]

  结果:(2 row(s) affected)

  

  二、使用 FOR XML PATH

SELECT  DISTINCT [Student]
      ,STUFF(
                        (
                              SELECT ‘,‘+[Course]
                              FROM [dbo].[SC]
                              WHERE Student = A.Student
                              FOR XML PATH(‘‘)
                        )
                        ,1,1,‘‘
                  )AS Course
  FROM [dbo].[SC] AS A

  结果:(2 row(s) affected)

  

原文地址:https://www.cnblogs.com/xinaixia/p/10337805.html

时间: 2024-10-30 16:06:34

T SQL 将一列多行数据合并为一行的相关文章

T_SQL 将一列多行数据合并为一行

T_SQL 将一列多行数据合并为一行 SQL Server在进行数据迁移和报表处理的时候会遇到将一列多行数据拼接为一个字符串的情况,为了处理这个问题,在网上找了一些相关的资料,提供两种方法,供遇到类似问题的朋友们参考,也借此加深自己的印象. Table:SC Student Course 张三 大学语文 李四 大学语文 张三 书法鉴赏 张三 音乐欣赏 李四 电影赏析 期望得到的结果: Student Course 张三 大学语文,书法鉴赏,音乐欣赏 李四 大学语文,电影赏析 IF OBJECT_

sql里将重复行数据合并为一行,数据用逗号分隔

DECLARE @T1 table ( UserID int , UserName nvarchar(50), CityName nvarchar(50) ); insert into @T1 (UserID,UserName,CityName) values (1,'a','上海') insert into @T1 (UserID,UserName,CityName) values (2,'b','北京') insert into @T1 (UserID,UserName,CityName)

SQL 将一条记录中多个字段的值拼接为一个字段 && 将多行数据合并成一行,并且拼接CONVERT() 、for xml path的使用

接着上篇文章的订单表(商品编号,价格设置时间id(类似于创建时间,创建时间约早,则act_id越小) ,价格的时间段,商品价格) 一.将一条记录中多个字段的值拼接为一个字段 现要求将两个时间段合并为一个字段,应该如何做呢? 先来看下理想的结果: 查询出的时间段合并到一起了: 代码如下,将查询的字段用+'你想要的符号' + 拼接即可 select item,act_id,loc_id,convert(varchar(100),start_date,20)+ '-' +convert(varchar

mysql中将多行数据合并成一行数据

一个字段可能对应多条数据,用mysql实现将多行数据合并成一行数据 例如:一个活动id(activeId)对应多个模块名(modelName),按照一般的sql语句: 1 SELECT am.activeId,m.modelName 2 FROM activemodel am 3 JOIN model m 4 ON am.modelId = m.modelId 5 ORDER BY am.activeId 查询出的列表为图1所示: 图1 修改过后的sql语句,查询后如图2所示: 1 SELECT

SQL SERVER将多行数据合并成一行(转)

1)比如表中有三列数据: 2)执行如下查询: 1 SELECT [USER_NAME], [USER_ACCOUNT] 2 , [ROLE_NAME] = stuff(( 3 SELECT ',' + [ROLE_NAME] 4 FROM [WAP_WORKSHEET].[dbo].[userTest] 5 WHERE [USER_ACCOUNT] = a.[USER_ACCOUNT] 6 FOR XML path('') 7 ), 1, 1, '') 8 FROM [WAP_WORKSHEET

SQL实用技巧:如何将表中某一列的部分数据合并到一行中

select *,stuff(select ‘,’ + fieldname from table1 for xml path(”)),1,1,”)  as  field from table2 for xml path(”) ,自从 SQL Server2005及更高版本提供了一个新查询语法 ,主要是用于将一列中的部分数据合并到一个单元格中: stuff()函数主要是用于将制定位置的字符串用特定的字符串替换: 原文地址:https://www.cnblogs.com/chenshc/p/1182

oracle查询多行数据合并成一行数据

如果是oracle 10g以上 一个wm_concat函数就可以解决. 如果是oracle 9i以下就有点麻烦了. 表结构如下: NAME Null Type ------------------------ --------- ----- N_SEC_CODE NOT NULL CHAR(6) C_RESEARCHER_CODE NOT NULL VARCHAR2(20) 此表保存了“股票”与“研究员”的对应关系数据,一般而言,对于同一只股票而言,可能有多个研究员 对其进行跟踪研究.所以目前遇

sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果

select  [value] = stuff((select ','+modmb003  from modmb detail where modmb=18 for xml path('')), 1, 1, '') 其中stuff的作用是:删除指定长度的字符,并在指定的起点处插入另一组字符 语法:STUFF ( character_expression , start , length ,character_expression ) 列:SELECT STUFF('abcdef', 2, 3,

SQLServer 中多行数据合并成一行数据(一个字段)

需求:有四行数据,如下: 1.苹果 2.橘子 3.桃子 4.波罗 合并成一个字段:苹果,橘子,桃子,波罗: 需求明确之后,先弄点测试数据,上代码: --创建一个临时表 Create table #temp ( testName varchar(20) ) --写入测试数据 INSERT INTO #temp(testName) values('苹果'); INSERT INTO #temp(testName) values('橘子'); INSERT INTO #temp(testName) v