如何得到:
id Name Value
1 A 4
1 B 8
2 C 9
Run Code Online (Sandbox Code Playgroud)
至
id Column
1 A:4, B:8
2 C:9
Run Code Online (Sandbox Code Playgroud) 我正在尝试将基于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,所以请错误地说太多的解释:)
我有一个列的表:
|-------------|
| ColumnName |
|-------------|
| Value One |
| Value Two |
| Value Three |
| Value Four |
| Value Five |
|-------------|
Run Code Online (Sandbox Code Playgroud)
我会声明一个变量,
DECLARE @ColumnNameList VARCHAR(MAX)
Run Code Online (Sandbox Code Playgroud)
我应该在我的变量中找到以下值
'Value One,Value Two,Value Three,Value Four,Value Five'
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?
提前致谢.
我想知道这张表是否有可能
ID Price ServiceID
1 50 11
1 -10 12
2 100 11
2 20 11
Run Code Online (Sandbox Code Playgroud)
按ID分组,总结价格并连接serviceID,如下所示:
ID Price ServiceID
1 40 11,12
2 120 11
Run Code Online (Sandbox Code Playgroud)
按ID分组并对价格求和是相当简单的,但是连接服务ID会让我感到不安.
感谢您的参与.
我有一张桌子如:
|Date |Name|
--------------------
|'20-May-2011'|Bob |
|'20-May-2011'|Fred|
|'20-May-2011'|Jim |
|'21-May-2011'|Bob |
|'21-May-2011'|Ed |
|'22-May-2011'|Bill|
Run Code Online (Sandbox Code Playgroud)
我需要一个查询来返回:
|Date |Count|Names |
--------------------------------------
|'20-May-2011'| 3|'Bob, Fred, Jim'|
|'21-May-2011'| 2|'Bob, Ed' |
|'22-May-2011'| 1|'Bill' |
Run Code Online (Sandbox Code Playgroud)
换句话说,我想要一个列表和按日期的名称计数.我能想到的最好的是:
SELECT list.[Date], [Count], [Names]
FROM (
SELECT [Date],
STUFF((
SELECT ', ' + [Name]
FROM #table t2
WHERE t2.[Date] = t.[Date]
ORDER BY [Name]
FOR XML PATH('')
), 1, 2, '') AS [Names]
FROM #table t
GROUP BY [Date]
) [list]
INNER JOIN (
SELECT [Date],
COUNT(*) AS [Count] …Run Code Online (Sandbox Code Playgroud)