相关疑难解决方法(0)

如何将多行中的文本连接成SQL Server中的单个文本字符串?

考虑一个包含三个行的名称的数据库表:

Peter
Paul
Mary
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以将其转换为单个字符串Peter, Paul, Mary

sql sql-server csv string-concatenation group-concat

1813
推荐指数
33
解决办法
222万
查看次数

在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查询 - 将结果连接成一个字符串

我有一个包含以下代码的sql函数:

DECLARE @CodeNameString varchar(100)

SELECT CodeName FROM AccountCodes ORDER BY Sort
Run Code Online (Sandbox Code Playgroud)

我需要将select查询中的所有结果连接到CodeNameString中.

显然,C#代码中的FOREACH循环会这样做,但我如何在SQL中执行此操作?

sql t-sql sql-server sql-function

36
推荐指数
4
解决办法
15万
查看次数

从行获取最大值并连接到另一个表

对不起,如果这是愚蠢的,我真的是一个新手试图指出这一点.

Table A:
ID  Rank Name
1   100  Name1
1    45  Name2
2    60  Name3
2    42  Name4
2    88 Name5

Table B:
ID FileName
1  fn1
2  fn2
Run Code Online (Sandbox Code Playgroud)

我想要的是

1 fn1 name1
2 fn2 name5
Run Code Online (Sandbox Code Playgroud)

这是我的查询的样子,但是当我进行连接时,它给了我多行结果(而不是max)

select B.Id B.FileName,A.Name
FRom B
JOIN ( 
select A.Id, MAX(A.Rank)as ExpertRank 
from A 
group by A.Id
) as NewA on A.Id = B.ID 
join B on A.Rank = NewA.Rank
Run Code Online (Sandbox Code Playgroud)

子查询工作正常,我得到了加入的问题.

我该如何解决?

谢谢.

我有sql server 2008 R2

最后一个是我错过的.

select B.Id B.FileName,A.Name 
FRom B 
JOIN …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

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

使用分组将许多行连接到单个文本字符串中

我有下表:tblFile

tblFile

我想要的输出:

在此输入图像描述

我将许多行连接成一个文本字符串; 但是,我无法正确分组.现在代码只显示FileNameString字段中的每条记录:AAA,BBB,CCC,DDD,EEE,FFF

任何有关分组的建议!

SELECT FileID, Stuff(
(SELECT     N', ' + CONVERT(Varchar, FileName) 
FROM         tblFile  FOR XML PATH(''),TYPE )
.value('text()[1]','nvarchar(max)'),1,2,N'')AS FileNameString 
From tblFile
GROUP BY FileID
Run Code Online (Sandbox Code Playgroud)

xml sql t-sql sql-server string-concatenation

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

将查询结果加入由逗号分隔的单行值

可能重复:
SQL Server:我可以用逗号分隔多行到一列吗?

我有这样的查询:

SELECT name from users
Run Code Online (Sandbox Code Playgroud)

它的结果是许多记录:

1 user1
2 user2
3 user3
Run Code Online (Sandbox Code Playgroud)

我希望将所有这些记录放在一行中用逗号分隔:

user1, user2, user3
Run Code Online (Sandbox Code Playgroud)

如果查询结果为空,则为空行.

如何使用T-SQLUNPIVOT

sql t-sql sql-server

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

在SQL Server存储过程中按索引而不是名称访问表的列

有没有办法在SQL Server的存储过程中通过索引访问列?

目的是计算大量列.我正在阅读关于游标的内容,但我不知道如何应用它们.

让我解释一下我的问题:

我有一排像:

field_1 field_2 field_3 field_4 ...field_d  Sfield_1 Sfield_2 Sfield_3...Sfield_n
1       2       3       4          d        10       20       30         n
Run Code Online (Sandbox Code Playgroud)

我需要计算类似的东西 (field_1*field1) - (Sfield_1* Sfiled_1) / more...

因此结果存储在表列中d次.

所以结果就是一张d column * d row桌子.

由于列数是可变的,我正在考虑制作动态SQL,在字符串中获取列的名称并拆分我需要的列,但这种方法使问题更难.我认为通过索引获取列号可以使生活更轻松.

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

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

如何在sql中用单引号连接列值?

如何在sql中用单引号和逗号连接列值?

select tpaa_id  from dbo.Sheet
where tpaa_id is not null
Run Code Online (Sandbox Code Playgroud)

目前查询返回,值为..

ABC123
ABC456
Run Code Online (Sandbox Code Playgroud)

我们有大约 1000 条记录。

我希望返回

'ABC123',
'ABC456',
Run Code Online (Sandbox Code Playgroud)

sql sql-server

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

是否可以使用CTE将列值连接成字符串?

说我有下表:

id|myId|Name
-------------
1 | 3  |Bob 
2 | 3  |Chet
3 | 3  |Dave
4 | 4  |Jim
5 | 4  |Jose
-------------
Run Code Online (Sandbox Code Playgroud)

是否可以使用递归CTE生成以下输出:

3 | Bob, Chet, Date
4 | Jim, Jose
Run Code Online (Sandbox Code Playgroud)

我已经玩过一些但却无法让它发挥作用.我会用更好的技术做得更好吗?

sql sql-server common-table-expression sql-server-2008

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

将行/记录中的多个数据合并为一行,使用逗号分隔字段

如果我要查询我们的ORDERS表,我可能会输入以下内容:

 SELECT * FROM ORDERS
 WHERE ITEM_NAME = 'Fancy Pants'
Run Code Online (Sandbox Code Playgroud)

在此查询的结果中,我可能会得到以下内容:

 ----------------------------------------------------------------------
 ORDER_ID       WAIST       First_Name       Email
 ----------------------------------------------------------------------
 001            32          Jason            j-diddy[at]some-thing.com
 005            28          Pip              pirrip[at]british-mail.com
 007            28          HAL9000          olhal[at]hot-mail.com
Run Code Online (Sandbox Code Playgroud)

现在,我也想从另一个表中提取信息:

SELECT*FROM PRODUCTS ITERE_NAME ='Fancy Pants'

 ------------------------------------------
 PRODUCT_ID     Product       Prod_Desc
 ------------------------------------------
 008            Fancy Pants   Really fancy.
Run Code Online (Sandbox Code Playgroud)

但是,最后,我实际上想通过SQL查询将这些记录压缩成一行:

 -----------------------------------------------------------------------------
 PRODUCT       ORDER_Merged  First_Name_Merged  Email_Merged
 -----------------------------------------------------------------------------
 Fancy Pants   001,005,007   Jason,Pip,Hal9000  j-di[...].com, pirrip[...].com
Run Code Online (Sandbox Code Playgroud)

无论如何,这就是它的样子.我无法弄清楚的是"合并"查询的样子.

不幸的是,我在这里的搜索引导我获得PHP的结果.我发现了几个结果:通过SQL合并到CSV行,但我认为它们在我的场景中不起作用.

任何见解都将一如既往地受到高度赞赏.

更新:

啊,事实证明STUFF,FOR XML功能正是我所需要的.谢谢大家!!

 Select
    A.name,
         stuff((
         select ',' + B.address
         from …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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