1つの識別子(ArtNr)とリターン(編集)を含む1つの大きなテキストチャンクを使用してデータベースから結果を取得しようとしていますが、(編集)列のテキストも文字列化する必要がありますか?(このように: "texttexttext"それは私がテキストの最初と最後に必要な ""です)
私は以下のクエリを考え出しましたが、応答で1行しか表示されません(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"
次のクエリで目的の結果が得られるはずです(編集をどのように区切るかは正確にはわかりませんが、セミコロンを使用しました)。
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()
機能を使用して行を単一のフィールドに連結する方法の完全な説明は、この回答にあります。
複数の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
が、このシナリオではあまり利点がありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加