相关疑难解决方法(0)

在Microsoft SQL Server 2005中模拟group_concat MySQL函数?

我正在尝试将基于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,所以请错误地说太多的解释:)

sql sql-server sql-server-2005 string-aggregation

342
推荐指数
9
解决办法
17万
查看次数

T-SQL是否具有连接字符串的聚合函数?

可能重复:
SQL Server 2000中的内嵌类型函数?
连接行值T-SQL

我有一个我正在查询的视图,看起来像这样:

BuildingName    PollNumber
------------    ----------
Foo Centre      12        
Foo Centre      13
Foo Centre      14
Bar Hall        15
Bar Hall        16
Baz School      17
Run Code Online (Sandbox Code Playgroud)

我需要编写一个将BuildingNames组合在一起的查询,并显示一个PollNumbers列表,如下所示:

BuildingName    PollNumbers
------------    -----------
Foo Centre      12, 13, 14
Bar Hall        15, 16
Baz School      17
Run Code Online (Sandbox Code Playgroud)

我怎么能在T-SQL中做到这一点?我宁愿不为此写一个存储过程,因为它看起来有点矫枉过正,但我​​不是一个数据库人.看起来像SUM()或AVG()这样的聚合函数是我需要的,但我不知道T-SQL是否有一个.我正在使用SQL Server 2005.

t-sql sql-server group-by sql-server-2005 aggregate-functions

76
推荐指数
2
解决办法
8万
查看次数

如何在一列中返回多个值(T-SQL)?

我有一个table UserAliases(UserId, Alias)每个用户有多个别名.我需要查询它并返回给定用户的所有别名,诀窍是将它们全部返回到一列中.

例:

UserId/Alias  
1/MrX  
1/MrY  
1/MrA  
2/Abc  
2/Xyz
Run Code Online (Sandbox Code Playgroud)

我希望查询结果采用以下格式:

UserId/Alias  
1/ MrX, MrY, MrA  
2/ Abc, Xyz
Run Code Online (Sandbox Code Playgroud)

谢谢.

我正在使用SQL Server 2005.

ps实际的T-SQL查询将不胜感激:)

sql t-sql sql-server sql-server-2005

46
推荐指数
2
解决办法
14万
查看次数

如何将具有重复 ID 的行中的不同列值连接为一行?

我有这个查询:

SELECT DISTINCT
            ces.CourseEventKey,
            up.Firstname + ' ' + up.Lastname
FROM        InstructorCourseEventSchedule ices
INNER JOIN  CourseEventSchedule ces ON ces.CourseEventScheduleKey = ices.MemberKey
INNER JOIN  UserProfile up ON up.UserKey = ices.UserKey
WHERE       ces.CourseEventKey IN
            (
                SELECT      CourseEventKey
                FROM        @CourseEvents
            )
ORDER BY CourseEventKey
Run Code Online (Sandbox Code Playgroud)

它产生这个结果集:

CourseEventKey Name
-------------- --------------------
30             JACK K. BACKER
30             JEFFREY C PHILIPPEIT
30             ROBERT B. WHITE
33             JEFFREY C PHILIPPEIT
33             KENNETH J. SIMCICH
35             JACK K. BACKER
35             KENNETH J. SIMCICH
76             KENNETH J. SIMCICH
90             BARRY …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server concatenation

2
推荐指数
1
解决办法
7181
查看次数

将数据合并为一行

可能重复:
连接行值T-SQL

我是SQL Server的新手,并尝试过几种从互联网上建议的技术,比如使用临时变量,XML路径COALESCE等,但都不能满足我的要求.

我正在使用Toad for SQL Server 5.5来创建SQL脚本,而我用来查询DB服务器的帐户只能获得READ访问权限.因此不能使用CREATE VIEW我相信的声明.

表名: Customer

ServerName  Country  contact
----------  -------  -------------
srv1        SG       srv1_contact1
srv1        SG       srv1_contact2
srv1        SG       srv1_contact3
srv2        HK       srv2_contact1
srv2        HK       srv2_contact2
srv3        JP       srv3_contact1
srv3        JP       srv3_contact2
srv3        JP       srv3_contact3
srv4        KR       srv4_contact1
Run Code Online (Sandbox Code Playgroud)

预期产量:

ServerName  Country  contact
----------  -------  -------------------------------------------
srv1        SG       srv1_contact1; srv1_contact2; srv1_contact3
srv2        HK       srv2_contact1; srv2_contact2
srv3        JP       srv3_contact1; srv3_contact2; srv3_contact3
srv4        KR       srv4_contact1
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2008

1
推荐指数
1
解决办法
3万
查看次数