zoukankan      html  css  js  c++  java
  • SQL 将一列多行数据合并为一行

    原表数据:

    期望结果:

    使用STUFF + FOR XML PATH即可实现以上效果

    执行以下SQL:

    SELECT DISTINCT Name, STUFF((SELECT ',' + Course FROM Student WHERE Name = T.Name FOR XML PATH('')), 1, 1, '') AS Course FROM Student AS T

     可以看到输出结果与期望结果相同:

    STUFF语法

    STUFF ( character_expression , start , length , replaceWith_expression )  

    参数

    character_expression
    字符数据的表达式。 character_expression 可以是常量、变量,也可以是字符列或二进制数据列。

    start
    一个整数值,指定删除和插入的开始位置。 如果 start 为负或为零,则返回空字符串。 如果 start 的长度大于第一个 character_expression,则返回空字符串。 start 的类型可以是 bigint。

    length
    一个整数,指定要删除的字符数。 如果 length 为负,则返回空字符串。 如果 length 的长度大于第一个 character_expression,则最多可以删除到最后一个 character_expression 中的最后一个字符。 如果 length 为零,则在字符串中第一个字符之前插入内容。 length 的类型可以是 bigint。

    replaceWith_expression
    字符数据的表达式。 character_expression 可以是常量、变量,也可以是字符列或二进制数据列。 此表达式从 start 开始替换 length 个字符的 character_expression。 如果 replaceWith_expression 为 NULL,则在不插入任何内容的情况下删除字符。

     

    FOR XML PATH

    其实FOR XML PATH就是将查询结果集以XML形式展现,有了它我们可以简化查询语句以实现一些以前需要借助函数活存储过程才能完成的工作。以上面的表格为例,执行以下SQL:

    SELECT * FROM Student FOR XML PATH

    结果如下:

    执行以下SQL:

    SELECT * FROM Student FOR XML PATH('')

    结果如下:

    由此可以看出 FOR XML PATH 可以将查询结果根据行输出成XML格式。

  • 相关阅读:
    Python 多核 多线程 调度
    mysql-select for update
    Python logging模块
    TCP/IP和HTTP协议与Socket的区别联系
    DNS+CDN
    wget命令
    Cannot find module 'webpack-cli/bin/config-yargs
    TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'
    js 创建私有变量
    报错集锦及解决方案
  • 原文地址:https://www.cnblogs.com/feiyuhuo/p/10748112.html
Copyright © 2011-2022 走看看