使用 SQL Server 2017 的 STRING_AGG 函数生成唯一值
SQL Server 2017 中的 STRING_AGG
函数不直接支持不同值。 然而,使用两步方法可以获得独特的汇总结果。 此方法避免了 STRING_AGG(DISTINCT column, ',')
.
该解决方案涉及公共表表达式(CTE)来预处理数据。 CTE 对数据进行分组,以在最终聚合之前消除重复项。
下面的示例演示了这种技术。 初始 Sitings
CTE 提供样本数据。然后,CTE_Animals
CTE 按 State
、City
和 Siting
进行分组以删除冗余条目。然后,主查询使用 STRING_AGG
连接每个 Siting
和 State
组合的唯一 City
值。
<code class="language-sql">WITH Sitings AS ( SELECT * FROM (VALUES (1, 'Florida', 'Orlando', 'bird'), (2, 'Florida', 'Orlando', 'dog'), (3, 'Arizona', 'Phoenix', 'bird'), (4, 'Arizona', 'Phoenix', 'dog'), (5, 'Arizona', 'Phoenix', 'bird'), (6, 'Arizona', 'Phoenix', 'bird'), (7, 'Arizona', 'Phoenix', 'bird'), (8, 'Arizona', 'Flagstaff', 'dog') ) F (ID, State, City, Siting) ) ,CTE_Animals AS ( SELECT State, City, Siting FROM Sitings GROUP BY State, City, Siting ) SELECT State, City, COUNT(*) AS [# Of Sitings], STRING_AGG(Siting,',') AS Animals FROM CTE_Animals GROUP BY State, City ORDER BY State, City;</code>
此方法保证最终的 Animals
列仅包含每个位置的唯一动物目击事件,而 # Of Sitings
列反映了不同的计数。 ORDER BY
子句确保一致且可预测的输出顺序。
以上是如何在 SQL Server 2017 中使用 STRING_AGG 获得不同的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!