我正在尝试将基于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 Server数据库中合并这样的东西:
[TicketID], [Person] T0001 Alice T0001 Bob T0002 Catherine T0002 Doug T0003 Elaine
进入:
[TicketID], [People] T0001 Alice, Bob T0002 Catherine, Doug T0003 Elaine
我需要在SQL Server和Oracle中执行此操作.
我发现GROUP_CONCATMySQL 的功能完全符合我的需要,但MySQL不是一个选项.
编辑:测试台:
DECLARE @Tickets TABLE (
[TicketID] char(5) NOT NULL,
[Person] nvarchar(15) NOT NULL
)
INSERT INTO @Tickets VALUES
('T0001', 'Alice'),
('T0001', 'Bob'),
('T0002', 'Catherine'),
('T0002', 'Doug'),
('T0003', 'Elaine')
SELECT * FROM @Tickets
Run Code Online (Sandbox Code Playgroud) 我有这张桌子
Run Code Online (Sandbox Code Playgroud)Cream ---------- CHOCALATE GREEN TEST
想要输入这样的选择查询
CHOCALATE,GREEN,TEST
我有两张桌子:
名称(id,名称)地址(id,name_id,地址)
我想编写一个返回我的查询:名称,地址列表(address1,address2,adress3,..)
就像是:
Select A.name, B.list_of_addresses
From Names A
Inner Join (Select name_id, /*list_of_addresses with comma between them*/
From Addresses
Group By name_id) B ON A.id=B.name_id
Run Code Online (Sandbox Code Playgroud)