考虑一个包含三个行的名称的数据库表:
Peter
Paul
Mary
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以将其转换为单个字符串Peter, Paul, Mary
?
表是:
+----+------+
| Id | Name |
+----+------+
| 1 | aaa |
| 1 | bbb |
| 1 | ccc |
| 1 | ddd |
| 1 | eee |
+----+------+
Run Code Online (Sandbox Code Playgroud)
所需输出:
+----+---------------------+
| Id | abc |
+----+---------------------+
| 1 | aaa,bbb,ccc,ddd,eee |
+----+---------------------+
Run Code Online (Sandbox Code Playgroud)
查询:
SELECT ID,
abc = STUFF(
(SELECT ',' + name FROM temp1 FOR XML PATH ('')), 1, 1, ''
)
FROM temp1 GROUP BY id
Run Code Online (Sandbox Code Playgroud)
此查询正常运行.但我只需要解释它是如何工作的,或者是否有其他或简短的方法来做到这一点.
我很难理解这一点.
在检查Web上的一些代码和SQL Server Management Studio生成的脚本时,我注意到某些语句以分号结束.
那么什么时候应该使用它?
我需要在表上返回记录,我的结果集需要包含逗号分隔列表.
我附上了3张桌子的图片.我需要做一个select,它返回第一个表中的记录,并包含屏幕截图中第3个表中存在的最后一个AwardFocusName.
所以我的结果集将返回一条记录,并在其中包含AwardFocusNames列表(以逗号分隔).
在我的SQL Server 2005数据库中,使用SLQ查询,是否有人知道将记录组合在一起的最佳方法,并从另一个字段获取逗号分隔的值列表?
所以,如果我有:
UserID Code
1 A
1 C5
1 X
2 V3
3 B
3 D
3 NULL
3 F4
4 NULL
Run Code Online (Sandbox Code Playgroud)
我得到:
UserID Code
1 A,C5,X
2 V3
3 B,D,F4
4 NULL
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我在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
Run Code Online (Sandbox Code Playgroud)
上面产生了以下结果:
+---------+-----------+--------------+-------------------------+
| State | City | …
Run Code Online (Sandbox Code Playgroud) 我有以下表格:
EntryTag
---------
EntryID
TagID
Run Code Online (Sandbox Code Playgroud)
putput示例(EntryID,TagID):
1 2
1 4
1 5
2 3
2 4
2 5
etc...
Run Code Online (Sandbox Code Playgroud)
和
Tags
----
TagID
Name
Run Code Online (Sandbox Code Playgroud)
示例输出:
1 peas
2 corn
3 carrots
...etc.
Run Code Online (Sandbox Code Playgroud)
我希望每个条目带回标签列表,但作为标记以逗号分隔的一行.
例如,我想看到这个:
EntryID TagsCommaDelimited
------- ------------------
1 corn, peas, carrots
2 barley, oats
...and so on
Run Code Online (Sandbox Code Playgroud)
所以我需要列出每个EntryID及其对应的标记逗号分隔列表.
我选择的内容表如下所示:
Content
--------
ID -(which is in essence the EntryID, they didn't make it consistent)
Description
..etc.
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的,但我的语法没有运气:
declare @tagsCommaDelimited varchar (200)
set @tagsCommaDelimited = '';
With AllEntryTags_CTE(Name, EntryID )
as …
Run Code Online (Sandbox Code Playgroud) 提前致谢。
我有一个像这样的值的表
class_id Instructor_Name
———————————
1 Joe
2 Joe
3 Joe
1 Judy
2 Judy
2 Kevin
3 Kevin
Run Code Online (Sandbox Code Playgroud)
我想要这样的结果集使用 SQL 语句:
id name services (I want)
———————————–
1 Joe, Judy
2 Joe, Judy, KevinC
3 Joe, Kevin
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到这个
谢谢,布里杰什
sql-server ×7
sql ×6
t-sql ×2
csv ×1
database ×1
distinct ×1
group-concat ×1
join ×1
subquery ×1