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格式。

  • 相关阅读:
    is_enable()、is_displayed()、isSelected()
    python selenium(常用关键字)
    Jenkins 构建 Jmeter 项目之源代码管理(SVN)
    Jenkins 构建 Jmeter 项目
    SAP SD基础知识之现金销售
    SAP SD基础知识之与FI集成相关的流程与配置
    SAP SD 基础知识之计划行类别(Schedule Line Category)
    SAP MM 事务代码MRKO触发的财务凭证不会出现在PO History里
    SAP MM 对于MRKO事务代码的几点优化建议
    SAP SD 销售中的借贷项凭证
  • 原文地址:https://www.cnblogs.com/feiyuhuo/p/10748112.html
Copyright © 2011-2022 走看看