BI-SQL丨XML PATH

XML PATH

在SQL Server中,XML数据类型的应用范围是非常宽泛的,除了可以使用value和nodes处理一行拆多行的情况,我们还可以使用PATH处理多行合并成一行。

使用实例

例子:使用PATH处理多行合并成一行。

创建一张表,表中针对同一分类存在不同的行值。

代码如下:

CREATE TABLE XML_TEST(
    UserName NVARCHAR(200) NOT NULL DEFAULT '',
    UserValue NVARCHAR(200) NOT NULL DEFAULT ''
)
GO
;
--创建一张表,两列即可,一列用作分组,一列存储值

INSERT INTO
    XML_TEST
VALUES
    (N'白茶', 'PowerBI'),
    (N'白茶', 'SQLServer'),
    (N'白茶', 'SSIS'),
    (N'黑茶', 'Embedded'),
    (N'黑茶', 'Azure'),
    (N'黑茶', 'Mysql'),
    (N'绿茶', 'Oracle'),
    (N'绿茶', 'SSRS')
GO
;
--向表中插入值,针对同一分组,值不相同

我们来看一下数据结果:

接下来,我们就可以通过XML PATH进行多行合并处理了。

代码如下:

SELECT
    A1.UserName,
    STUFF(
        (
            SELECT
                N'、' + UserValue
            FROM
                XML_TEST
            WHERE
                XML_TEST.UserName = A1.UserName FOR XML PATH('')
        ),
        1,
        1,
        ''
    ) AS UserValue
FROM
    XML_TEST AS A1
GROUP BY
    A1.UserName
GO
;

结果如下:

这样我们就完成了多行合并的处理。

分步解析:

①XML PATH用途

在上述代码中,XML PATH起到的作用是什么?

代码如下:

SELECT
    N'、' + UserValue
FROM
    XML_TEST FOR XML PATH('')

我们先来看一下查询结果:

通过上面的结果,我们不难理解,其实它就是将查询结果集以XML形式呈现,将多行的查询结果,合并在同一行展示。

②GROUP BY

通过XML PATH,我们可以将多行合并成一行进行展示,接下来其实就是通过GROUP BY进行分组合并。

先看下面的代码:

SELECT
    A1.UserName,
    (
        SELECT
            N'、' + UserValue
        FROM
            XML_TEST
        WHERE
            XML_TEST.UserName = A1.UserName FOR XML PATH('')
    ) AS UserValue
FROM
    XML_TEST AS A1

结果如下:

通过WHERE关键字,我们可以将XML PATH的结果与表中原有UserName列进行自关联展示,但是会有很多的重复项,因此,我们需要通过GROUP BY来进行分组去重。

③STUFF函数

在上面的截图中,我们不难发现,每个结果前面都多了一个分隔符,很明显,从应用层来说,第一个分隔符是不需要的。

而STUFF函数,可以在源字符中,删除给定长度的字符序列,并且从指定的起始位置,插入给定的字符序列。

语法如下:

STUFF (source_string, start, length, change_string)

将上述代码,添加STUFF进行处理:

SELECT
    A1.UserName,
    STUFF(
        (
            SELECT
                N'、' + UserValue
            FROM
                XML_TEST
            WHERE
                XML_TEST.UserName = A1.UserName FOR XML PATH('')
        ),
        1,
        1,
        ''
    ) AS UserValue
FROM
    XML_TEST AS A1

结果如下:

这里是白茶,一个PowerBI的初学者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fabric丨白茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值