sql - Xquery 获取连续的不同值

标签 sql sql-server xml xquery xquery-sql

尝试获取与以下 XML 不同的连续内容。

<x>
    AB
</x>
<x>
    AB
</x>
<x>
    AB
</x>
<x>
    AC
</x>
<x>
    AB
</x>

预期结果:

AB AC AB

当前结果:

AB AC

代码:

SELECT * ,STUFF(( TheParts.query(' for $x in distinct-values(/x/text()) return <x>{concat(" | ", $x)}</x> ').value('.', 'varchar(max)') ), 1, 1, '') AS Hierarchy 
FROM Table

不同值与整个集合不同,但我只想在连续的情况下获得不同值。

最佳答案

我们有一个纯 XQuery 解决方案。

SQL

SELECT REPLACE(CAST('<x>AB</x>
    <x>AB</x>
    <x>AB</x>
    <x>AC</x>
    <x>AB</x>' as xml)
.query('
    for $v in x
    let $n := x[. >> $v][1]
    return if ($v/text()[1] = $n/text()[1]) then ()
            else data($v)
').value('.', 'VARCHAR(MAX)'), SPACE(1), ' | ') AS Result;

输出

+--------------+
|    Result    |
+--------------+
| AB | AC | AB |
+--------------+

关于sql - Xquery 获取连续的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70252942/

相关文章:

sql - 在 SQL Server 中使用 FOR XML PATH 查询以获取分层数据的 XML 输出

php - SQL查询不返回值,设置为 session 变量

基于变量值的 SQL 条件

java - Android Studio 3.2 更新后,我的所有 FAB 图标都很小并且位于右上角

sql - PL/pgSQL : merge results from iterative function call in another function

sql - 触发错误时回滚事务

sql - 如何将多个值传递给存储过程中的单个参数

javascript - 如何找到使用 Javascript 工具提示定义的 Web 元素的 Xpath?

xml - 使用 XML 进行 Ajax 响应与普通 HTML

MySQL如何构建Where Clause