我有一张带有电话号码的桌子.我没有为每个号码吐出一行,而是返回逗号分隔的电话号码列表.在sql中最简单的方法是什么?一会儿循环?
我正在寻找一种循环表的列来生成输出的方法,如下所述.
该表看起来像这样:
ID Name OPTION1 OPTION2 OPTION3 OPTION4 OPTION5 1 MyName1 1 0 1 1 0 2 MyName2 0 0 1 0 0
输出看起来像这样:
MyName1 -> OPTION1, OPTION3, OPTION4 MyName2 -> OPTION3
这样做的任何方向都将非常感激.否则,我想我将不得不使用游标或临时表...数据库引擎是MSSQL.我在数据库级别进行格式化的原因是将其输出提供给有限的可编程环境.
更新:输出可以以任何形式,一串或多行字符串.
更新:通过使用@str = @str + ...构建字符串是否可以实现这一目标?
更新:我更改了输出...这应该更容易.
谢谢!
我想从一个叫做RMA(简化)的表中选择:
idRMA| RMA_Number
-----------------------
1 RMA0006701
2 RMA0006730
3 RMA0006736
4 RMA0006739
5 RMA0006742
Run Code Online (Sandbox Code Playgroud)
之间有一个结表RMA和tdefSymptomCode称为trelRMA_SymptomCode:
fiSymptomCode| fiRMA
-----------------------
1 1
1 2
2 2
5 3
7 3
8 3
2 5
3 5
4 5
5 5
Run Code Online (Sandbox Code Playgroud)
为了完整起见,这是tdefSymptomCode:
idSymptomCode SymptomCodeNumber SymptomCodeName
1 0000 Audio problem
2 0100 SIM problem
3 0200 Appearance problem
4 0300 Network problem
5 0500 On/Off problem
Run Code Online (Sandbox Code Playgroud)
每个RMA都可以有0-5个SymptomCodes.如何在标量值函数中将SymptomCodeNumber与':'等分隔符一起加入SymptomCodeNumber,这样我只得到一个varchar值作为结果.
像这样的东西(getRmaSymptomCodesSVF 在哪里):
SELECT idRMA, …Run Code Online (Sandbox Code Playgroud) 我有以下代码
select
(
select cast(Narrative as Varchar(max)) + char(13)
from officeclientledger
where ptmatter=$matter$ and ptTrans=4
for xml path (''), type
)
Run Code Online (Sandbox Code Playgroud)
它提供的结果如下:
Cwm Taff NHS Trust医疗记录 ; Purby医学博士 ; (不包括空格,需要插入以便提出问题)
但是,有没有办法提供诸如此类的结果
Cwm Taff NHS Trust医疗记录
Purby医学博士
我有一个如下的产品表.我想创建一个sql,它将为我提供以分号分隔的产品名称.
ProductName AccountExpert
--------------------------
Tea JohnSmith
Banana GarySulvan
Water JohnSmith
Candy BobbySimmons
ConfecItem BobbySimmons
Bread JohnSmith
Soda JohnSmith
Run Code Online (Sandbox Code Playgroud)
Sql输出应该是这样的
AccountExpert Products
-----------------------
JohnSmith Tea; Water; Bread; Soda
GarySulvan Banana
BobbySimmons Candy; ConfecItem
Run Code Online (Sandbox Code Playgroud) 数据库:SQL Server 2008。
我有一个像这样的真正(假)常规查询:-
SELECT CarId, NumberPlate
(SELECT Owner
FROM Owners b
WHERE b.CarId = a.CarId) AS Owners
FROM Cars a
ORDER BY NumberPlate
Run Code Online (Sandbox Code Playgroud)
这就是我想要得到的......
=> 1 ABC123 John, Jill, Jane
=> 2 XYZ123 Fred
=> 3 SOHOT Jon Skeet, ScottGu
Run Code Online (Sandbox Code Playgroud)
所以,我尝试使用
AS[Text()] ... FOR XML PATH('')但那是包括奇怪的编码字符(例如回车)。......所以我对此并不100%满意。
我还尝试查看是否有 COALESCE 解决方案,但我所有的尝试都失败了。
所以 - 有什么建议吗?
我有下表
Created Comment
2010/10/10 Text1
2010/11/11 Text2
2010/12/12 Text3
Run Code Online (Sandbox Code Playgroud)
我需要将所有注释收集到单个字符串中
SELECT @Comment = COALESCE(@Comment, '')
+ CHAR(13) + CHAR(10) + CONVERT(NVARCHAR(30), [dbo].[Comment].[Created], 101) + ': ' + ISNULL([Comment].[Text], '')
FROM Comment
Run Code Online (Sandbox Code Playgroud)
没有订购它按预期结束工作返回所有评论.但在运行以下代码后,添加了ORDER BY子句:
SELECT @Comment = COALESCE(@Comment, '')
+ CHAR(13) + CHAR(10) + CONVERT(NVARCHAR(30), [Created], 101) + ': ' + ISNULL([Text], '')
FROM Comment
ORDER BY Created
Run Code Online (Sandbox Code Playgroud)
只返回最后一条评论.有没有人知道为什么ORDER BY导致串联中的奇怪结果?
PS:如果使用FOR XML子句而不是连接,它可以正常工作是否有办法创建SQL Server函数以将子查询中的多行"连接"到单个分隔字段?.
我有一个公司,行业和company_industry_map多对多表.
company_id | company_name
1 Goldman Sachs
2 Microsoft
industry_id | industry
4 Technology
5 Finance
6 Banking
company_id | industry_id
1 5
1 6
2 4
Run Code Online (Sandbox Code Playgroud)
我想编写一个将所有行业加入逗号分隔列表的查询,如下所示:
company_id | industries
1 Finance, Banking
2 Technology
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试编写的一般查询:
SELECT company_id,
xxx AS industries
FROM company c,
company_industry_map m
WHERE c.company_id = m.company_id
Run Code Online (Sandbox Code Playgroud) 我知道你可以做到这一点,因为我之前已经看过它,但我忘记了到现在为止我不需要这样做.
我有一个名为Employees的表,它有各种员工数据(duh).我需要一个查询,它将对表中所有行的名字和姓氏进行选择,然后将它们全部置于逗号分隔的字符串中.
例如,我有几行(比实际上要多得多,但为了这个问题,假设有两个)数据看起来像:
FName LName ------- ----- Richard Prescott Jill Sentieri Carol Winger
我需要一个能够以这种形式返回上述数据的选择:
Richard Prescott, Jill Sentieri, Carol Winger
预先感谢您的帮助!
sql ×8
sql-server ×6
t-sql ×2
csv ×1
join ×1
loops ×1
select ×1
sql-order-by ×1
subquery ×1
xml ×1