【发布时间】:2019-01-09 19:09:31
【问题描述】:
我正在使用 SQL Server 2017 中的 STRING_AGG 函数。我想创建与 COUNT(DISTINCT <column>) 相同的效果。我试过STRING_AGG(DISTINCT <column>,','),但这不是合法的语法。
我想知道是否有 T-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)
)
SELECT State, City, COUNT(DISTINCT Siting) [# Of Types], STRING_AGG(Siting,',') Animals
FROM Sitings
GROUP BY State, City
上面的结果如下:
+---------+-----------+--------------+-------------------------+
| State | City | # Of Types | Animals |
+---------+-----------+--------------+-------------------------+
| Arizona | Flagstaff | 1 | dog |
| Florida | Orlando | 2 | dog,bird |
| Arizona | Phoenix | 2 | bird,bird,bird,dog,bird |
+---------+-----------+--------------+-------------------------+
输出正是我想要的,除了我希望为亚利桑那州凤凰城列出的串联“动物”是 DISTINCT,如下所示:
+---------+-----------+--------------+--------------------+
| State | City | # Of Types | Animals |
+---------+-----------+--------------+--------------------+
| Arizona | Flagstaff | 1 | dog |
| Florida | Orlando | 2 | dog,bird |
| Arizona | Phoenix | 2 | bird,dog |
+---------+-----------+--------------+--------------------+
有什么想法吗?
当我使用更大的真实数据集时,我收到关于“动物”列超过 8000 个字符的错误。
我认为我的问题与this one 相同,只是我的示例要简单得多。
【问题讨论】:
标签: sql sql-server distinct sql-server-2017 string-aggregation