SQL Declare Query仅返回1行结果

时间:2015-04-09 07:37:44

标签: sql sql-server

我试图从我们的数据库中获取一个带有一个标识符(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"

1 个答案:

答案 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,但在这种情况下它没有提供太多优势。