相关疑难解决方法(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万
查看次数

将列值连接为单值SQL Server 2005

我有一个列的表:

|-------------|
| 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)

有人可以帮我解决这个问题吗?

提前致谢.

sql sql-server-2005

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

连接分组的行

我想知道这张表是否有可能

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会让我感到不安.

感谢您的参与.

xml sql t-sql xpath xquery

5
推荐指数
1
解决办法
3086
查看次数

SQL FOR XML PATH列表和COUNT

我有一张桌子如:

|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)

sql-server for-xml-path

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