1

我想知道是否可以根据另一列重新排序填充函数中的连接单元格。

截至目前,我正在使用以下查询

SELECT 
    Id, 
    KPI = STUFF((SELECT DISTINCT ', ' + Name
                 FROM #TempTable1 b 
                 WHERE b.Id = a.Id 
                 FOR XML PATH('')), 1, 2, '')

但这会按字母顺序输出。我想根据 ID 列订购。

以下是我的查询结果

在此处输入图像描述

我想订购它作为质量分数,准确度。这是基于 ORDERID 的另一列

在此处输入图像描述

4

1 回答 1

0

你需要做三件事:

  • 将一个ORDER BY子句添加到您现有的子查询中,该子查询用于将行提供给FOR XML PATH.
  • 删除DISTINCT聚合并替换为GROUP BY
  • 确定OrderID应如何影响Name输出中的顺序。

目前,您的子查询使用的DISTINCT是聚合运算符。为了访问子句中的值,OrderIDORDER BY需要将其聚合到与当前输出相同的级别,即Name. 由于看起来OrderID每个Name值可以有多个值,因此您必须确定聚合OrderID值以影响此查询中最终输出的顺序的意义。一个例子可能是用来MIN聚合它。

完整示例如下:

SELECT 
    Id, 
    KPI = STUFF((SELECT ', ' + Name
                 FROM #TempTable1 b 
                 WHERE b.Id = a.Id 
                 GROUP BY Name 
                 ORDER BY MIN(OrderId)
                 FOR XML PATH('')), 1, 2, '')
于 2021-07-14T20:23:31.850 回答