我试图从我们的数据库中获取一个带有一个标识符(ArtNr)的结果和一个包含返回(Edit)的大块文本, 我还希望(编辑)列中的文本被串扰? (像这样:" texttexttext"它是""我需要在文本的开头和结尾)
我已经提出了下面的查询,但它只给出了一行回复(应该像4000)并且它当然不会给我编辑标题为""因为我不知道怎么做:)
提前致谢! /基督徒
USE MSPes2t
DECLARE @result nvarchar(max) , @test nvarchar(255)
SELECT @result = AR.Edit , @test = AR.ArtNr
FROM DBO.AR
WHERE AR.ArtNr = '%'
ORDER BY AR.ArtNr
SELECT @test AS artnr,
@result AS edit
这是我搜索的结果:
像这样:
ArtNr | Edit
------+----------------------------------------
12001 | "edit"
12002 | "edit"
28001 | "edit"
答案 0 :(得分:0)
以下查询应该会给你想要的结果(虽然我不确定你想如何划分你的编辑,但我使用了分号):
SELECT ArtNr = '12001',
Edit = STUFF(( SELECT ';"' + ar.Edit + '"'
FROM dbo.AR
WHERE AR.ArtNr = '12001'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
有关如何使用xml扩展程序FOR XML PATH()
将行合并为单个字段的详细说明,请参阅this answer
如果你需要为多个ArtNo连接编辑,那么你可以使用像:
SELECT ar.ArtNr,
Edit = STUFF(( SELECT ';"' + ar2.Edit + '"'
FROM dbo.AR AS ar2
WHERE AR2.ArtNr = ar.ArtNr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM dbo.Ar
WHERE ar.ArtNr IN ('12001', '12002')
GROUP BY ar.ArtNr;
简单的工作示例
DECLARE @AR TABLE (ArtNr VARCHAR(5), Edit NVARCHAR(MAX));
INSERT @AR (ArtNr, Edit)
VALUES ('12001', 'editeditedit'), ('12001', 'edit2 edit2'),
('12001', 'edit3'), ('12002', 'edit2 edit2');
SELECT ar.ArtNr,
Edit = STUFF(( SELECT ';"' + ar2.Edit + '"'
FROM @AR AS ar2
WHERE AR2.ArtNr = ar.ArtNr
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM @AR AS ar
WHERE ar.ArtNr IN ('12001', '12002')
GROUP BY ar.ArtNr;
给出:
ArtNr | Edit
------+----------------------------------------
12001 | "editeditedit";"edit2 edit2";"edit3"
12002 | "editeditedit"
修改强>
根据您的要求输出,我认为您的查询就像将"
连接到编辑字段的任一端一样简单:
SELECT AR.ArtNr,
'"' + AR.edit + '"' AS Edit
FROM DBO.AR
WHERE AR.ArtNr = '%'
ORDER BY ArtNr;
在SQL Server 2012及更高版本中,您可以使用CONCAT
,但在这种情况下它没有提供太多优势。