`

SQL 多列转换为一行【转】

    博客分类:
  • SQL
sql 
阅读更多

--创建测试表
IF OBJECT_ID('test') IS NOT NULL
    DROP TABLE test
CREATE TABLE dbo.test(
    id int IDENTITY(1,1) NOT NULL,
    name varchar(50) NULL,
    subject varchar(50) NULL,
    source decimal(18,2) NULL
)
GO

--插入测试数据
INSERT INTO test (name,subject,source) 
    SELECT '张三','语文',60  UNION ALL
    SELECT '张三','英语',90  UNION ALL
    SELECT '李四','语文',70  UNION ALL
    SELECT '李四','数学',80  UNION ALL
    SELECT '王五','数学',75  UNION ALL
    SELECT '王五','英语',80
GO

SELECT * FROM test

--1 通过 select 累加
DECLARE @sql_col VARCHAR(8000)
SELECT @sql_col = ISNULL(@sql_col + ',','') + QUOTENAME(Subject) FROM test 
GROUP BY Subject

SELECT @sql_col

--2 通过 FOR xml path('') 合并字符串记录
SELECT 
    STUFF(
        (SELECT '#' + Subject
         FROM test
         WHERE name = '王五'
         FOR xml path('')
        ),1,1,''
        )
  
--3 分组合并字符串记录
SELECT
    name,
    Subject = (
               STUFF(
                    (SELECT '#' + Subject
                     FROM test
                     WHERE name = A.name
                     FOR xml path('')
                    ),1,1,''
                    )
                 )
FROM test A
GROUP by name


转自:https://www.cnblogs.com/xiaozhi1236/p/6344134.html?utm_source=itdadao&utm_medium=referral
分享到:
评论

相关推荐

    将SQL数据表的一列转换为一行.docx

    将SQL数据库的一列多行 数据转换为 一行多列

    DB2 SQL 实现行转列,列转行

    DB2 SQL 通过函数(CONCAT/POSSTR/LOCATE)实现行转列,列转行 可以按照标点把多列转换为一行,多行转换为一列

    sql多行转列

    主要是关于sqlserver的多行转列的问题,这是我经过个人测试的语句。

    SQL SERVER 根据关键字符,将一列分成多行

    可根据关键字符将一列分成多行显示,例如 A B 1 1.1.2 拆分成 1 1 1 1 1 2 进行相关的显示

    t-sql编程行列转换(静态和动态)

    t-sql编程实现静态和动态的行转列、列转行代码

    Sql_Servcer行转列及列转行说明.docx

    在做管材到站统计分析时,有很多地方需要将行数据转换为列信息。使用原有的行转列方法一个一个数据处理比较繁琐 ,使用Piovt方法进行数据行转列处理...UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值。

    SQL 语句 将一个表中用特殊字符分割的字段转换成多行数据.docx

    找了网上很多资料,都没有详细的做法有的还很复杂,自己写了个分割函数,通过直接查询就能分割多行,很方便。

    excel导入sql(excel转sql.zip

    选择完第一行后,就按方向键的向下键,继续第二行的选择,直到配置完Excel列和表字段的对应关系为止. 六 按"导入数据"按钮系统会自动将页面转到"转换信息"这一页面.你将可以看到第几行导入成功,或第几行导入失改的...

    经典SQL脚本大全

    │ │ 6.3.2 多列转换为行的交叉报表处理示例.sql │ │ 6.3.3 行值动态变化的交叉报表处理示例(转换多列).sql │ │ 6.3.3 行值动态变化的交叉报表处理示例.sql │ │ 6.3.4 化解字符串不能超过8000的方法.sql │ ...

    一列保存多个ID(将多个用逗号隔开的ID转换成用逗号隔开的名称)

    在做项目时,经常会遇到这样的表结构在主表的中有一列保存的是用逗号隔开ID

    Sqlserver2000经典脚本

    │ 6.2.1 ROLLUP实现的分级汇总示例.sql │ │ 6.2.1 UNION ALL实现的分级汇总示例.sql │ │ 6.3.1 简单的交叉报表处理示例.sql │ │ 6.3.2 多列转换为行的交叉报表处理示例.sql │ │ 6.3.3 行...

    excel数据导入sql工具

    完第一行后,就按方向键的向下键,继续第二行的选择,直到配置完Excel列 和表字段的对应关系为止. 六 按"导入数据"按钮系统会自动将页面转到"转换信息"这一页面.你将可以看 到第几行导入成功,或第几行导入失改的...

    SQL语法大全

    rs.moveprevious 将记录指针从当前的位置向上移一行 rs.movefirst 将记录指针移到数据表第一行 rs.movelast 将记录指针移到数据表最后一行 rs.absoluteposition=N 将记录指针移到数据表第N行 rs.absolutepage=N 将...

    跟我学 SQL ——基本结构化查询语言

    另外,数据集合(data set)则指的是多行多列的数据,而且数据集合通常说明你的数据库或数据表内的全部数据。结果集合(result set)就是从数据库查询返回的数据;它能够描述从单一字段到数据库内全部数据这一范围内...

    精通SQL--结构化查询语言详解

    8.3.2 group by子句根据多列组合行 150 8.3.3 rollup运算符和cube运算符 151 8.3.4 group by子句中的null值处理 153 8.3.5 having子句 153 8.3.6 having子句与where子句 154 8.3.7 select语句各查询子句总结 ...

    程序员的SQL金典.rar

     11.8.1 将结果集转置为一行  11.8.2 把结果集转置为多行  11.9 递归查询  11.9.1 Oracle中的CONNECT BY子句  11.9.2 Oracle中的SYS_CONNECT_BY_PATH()函数  11.9.3 My SQL Server和DB2中递归查询 附录A 常用...

    SQL语言参考大全(CHM)

    获得查询结果并将结果集内的各行转换为 XML 元素,用一般标识符 <row /> 作为元素标记。有关更多信息,请参见使用 RAW 模式。 AUTO 以简单的嵌套 XML 树返回查询结果。在 FROM 子句内,每个在 SELECT 子句中至少有...

    sqlserver自定义函数

    打开测试数据库test,并以表w01为例,将下面的SQL语句放入sql2000查询分析器中,一段一段执行即可看到效果 ---在sql2000下创建测试数据表 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo]....

    MySQL中将一列以逗号分隔的值行转列的实现

    即一列中存储了多个属性值。如下表 pk value 1 ET,AT 2 AT,BT 3 AT,DT 4 DT,CT,AT 一般有这两种常见需求(测试数据见文末) 1.得到所有的不重复的值,如 value AT BT CT DT ET SQL...

Global site tag (gtag.js) - Google Analytics