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

  • 相关阅读:
    css 修改input中placeholder提示问题颜色
    js 获取屏幕或元素宽高...
    js时间相关
    golang——gRPC学习
    golang——win10环境protobuf的使用
    golang——net/rpc/jsonrpc包学习
    golang——net/rpc包学习
    golang——log包学习
    golang——database/sql包学习
    mysql——免安装配置
  • 原文地址:https://www.cnblogs.com/superfeeling/p/12459827.html
Copyright © 2011-2022 走看看