2015-04-09 2 views
0

Я пытаюсь получить результат из нашего db с одним идентификатором (ArtNr) и одним большим фрагментом текста, который также содержит возвраты (Edit), Я также хочу, чтобы текст из (Изменить), который должен быть набран? (вот так: «texttexttext» это «« Мне нужно в начале и конце текста »)SQL Declare Query возвращает только 1 результат строки

У меня есть запрос ниже, но он дает только 1 строку в ответе (должно быть как 4000) и это, конечно, не дает мне редактирование с надписью «», так как я понятия не имею, как это сделать :)

Заранее спасибо!/Christian

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

Сторона примечания: 'WHERE AR.ArtNr = '12001' ORDER BY AR.ArtNr' - что этот заказ должен был достичь? Мы знаем, что все строки имеют одинаковое значение для этого столбца, поэтому сортировка не требуется. –

+0

Примечание/Исправление: Извините, отправил вам пример, где я попытался использовать 1 конкретную строку, artnr 12001. ГДЕ может быть только что-либо% (я хочу все) – Christian

ответ

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() работ по concanate строк в одном поле можно найти в this answer

Если вам нужно, чтобы получить изменения каскадных кодов для более чем одного ArtNo, то вы можете использовать somethig как:

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; 

SIMPLE РАБОЧИЙ ПРИМЕР

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" 

EDIT

Основываясь на вашем требуемой производительности я думаю, что ваш запрос так прост, как конкатенации " либо конец вашего поля редактирования:

SELECT AR.ArtNr, 
     '"' + AR.edit + '"' AS Edit 
FROM DBO.AR 
WHERE AR.ArtNr = '%' 
ORDER BY ArtNr; 

В SQL Server 2012, а затем вы можете используйте CONCAT, но это не дает большого преимущества в этом сценарии.

+0

Впечатляющий наименьший код дал правильный ответ, огромное спасибо за вашу поддержку! – Christian

Смежные вопросы