考虑一个包含三个行的名称的数据库表:
Peter
Paul
Mary
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以将其转换为单个字符串Peter, Paul, Mary
?
如果您还想获得结果总数(在分页之前),那么在SQL Server 2000,2005,2008,2012中分页结果的最佳方法(性能明智)是什么?
我正在尝试将基于MySQL的应用程序迁移到Microsoft SQL Server 2005(不是选择,而是生活).
在原始应用程序中,我们几乎完全使用符合ANSI-SQL的语句,但有一个重要的例外 - 我们group_concat
经常使用MySQL的函数.
group_concat
顺便说一下,这样做:给出一张表,比如说,员工姓名和项目......
SELECT empName, projID FROM project_members;
Run Code Online (Sandbox Code Playgroud)
收益:
ANDY | A100
ANDY | B391
ANDY | X010
TOM | A100
TOM | A510
Run Code Online (Sandbox Code Playgroud)
...这是你用group_concat得到的:
SELECT
empName, group_concat(projID SEPARATOR ' / ')
FROM
project_members
GROUP BY
empName;
Run Code Online (Sandbox Code Playgroud)
收益:
ANDY | A100 / B391 / X010
TOM | A100 / A510
Run Code Online (Sandbox Code Playgroud)
所以我想知道的是:是否有可能在SQL Server中编写用户定义的函数来模拟其功能group_concat
?
我几乎没有使用UDF,存储过程或类似的东西的经验,只是直接的SQL,所以请错误地说太多的解释:)
我有一个我正在查询的视图,看起来像这样:
Run Code Online (Sandbox Code Playgroud)BuildingName PollNumber ------------ ---------- Foo Centre 12 Foo Centre 13 Foo Centre 14 Bar Hall 15 Bar Hall 16 Baz School 17
我需要编写一个将BuildingNames组合在一起的查询,并显示一个PollNumbers列表,如下所示:
Run Code Online (Sandbox Code Playgroud)BuildingName PollNumbers ------------ ----------- Foo Centre 12, 13, 14 Bar Hall 15, 16 Baz School 17
我怎么能在T-SQL中做到这一点?我宁愿不为此写一个存储过程,因为它看起来有点矫枉过正,但我不是一个数据库人.看起来像SUM()或AVG()这样的聚合函数是我需要的,但我不知道T-SQL是否有一个.我正在使用SQL Server 2005.
t-sql sql-server group-by sql-server-2005 aggregate-functions
假设我有这个表[表1]
Name Mark
------- ------
ABC 10
DEF 10
GHI 10
JKL 20
MNO 20
PQR 30
Run Code Online (Sandbox Code Playgroud)
我的SQL语句应该是什么来检索看起来像这样的记录:( group by [mark]).我已经完成了1和2列,但不知道如何完成第3列(使用相同的[mark]连接[name])
mark count names
---- ----- -----------
10 3 ABC,DEF,GHI
20 2 JKL,MNO
30 1 PQR
Run Code Online (Sandbox Code Playgroud)
我正在使用Microsoft SQL.请帮忙.谢谢
假设我有一个临时表,如下所示:
+----+------+
| Id | Value|
+----+------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
+----+------+
Run Code Online (Sandbox Code Playgroud)
我希望我的桌子像这样:
+----+----------+
| Id | ValueList|
+----+----------+
| 1 | 1,2,3 |
| 2 | 1,2 |
+----+----------+
Run Code Online (Sandbox Code Playgroud)
所以基本上我需要将我的值分组为逗号分隔列表.我已经尝试过以下方法:
SELECT Id, STUFF((SELECT ',' + CAST(VALUE AS varchar) FROM @MyTable FOR XML PATH('')), 1 ,1, '') AS ValueList
FROM @MyTable
GROUP BY Id
Run Code Online (Sandbox Code Playgroud)
但我得到的结论是:
+----+---------------------+
| Id | …
Run Code Online (Sandbox Code Playgroud) 在我的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)
谢谢你的帮助.
如果我有这样的表格:
+------------+
| Id | Value |
+------------+
| 1 | 'A' |
|------------|
| 1 | 'B' |
|------------|
| 2 | 'C' |
+------------+
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得这样的结果集:
+------------+
| Id | Value |
+------------+
| 1 | 'AB' |
|------------|
| 2 | 'C' |
+------------+
Run Code Online (Sandbox Code Playgroud)
我知道使用GROUP_CONCAT在MySQL中很容易做到,但我需要能够在MSSQL 2005中做到这一点
谢谢
我有两个表组织和员工有一对多的关系,即一个组织可以有多个员工.现在,我想选择特定组织的所有信息以及该组织的所有员工的名字.最好的方法是什么?我可以在单个记录集中获得所有这些,或者我必须基于否获得多行.员工?这是我想要的一点图形演示:
Org_ID Org_Address Org_OtherDetails Employess
1 132A B Road List of details Emp1, Emp2, Emp3.....
Run Code Online (Sandbox Code Playgroud) 我的表包含两个字段的详细信息:
ID DisplayName
1 Editor
1 Reviewer
7 EIC
7 Editor
7 Reviewer
7 Editor
19 EIC
19 Editor
19 Reviewer
Run Code Online (Sandbox Code Playgroud)
我想用DisplayName获取独特的细节
1 Editor,Reviewer 7 EIC,Editor,Reviewer
不要使用ID 7获取重复值
如何组合DisplayName详细信息?如何编写查询?
sql ×8
sql-server ×8
csv ×2
group-by ×2
t-sql ×2
database ×1
group-concat ×1
mysql ×1
pagination ×1
performance ×1
select ×1
xquery ×1