2012-06-07 2 views
0

Я следующий запрос:Сформировать строку из SQL Query

SELECT ChallanNo+'-'+CONVERT(VARCHAR(12),ChallanDate,106) 
    FROM Challan WHERE ChallanID IN 
    (SELECT ChallanID FROM ChallanDetail WHERE PTUID=42192) 

Этот результат запроса будет:

151468-29 May 2012 
151591-31 May 2012 

Теперь мне нужно строку, как это:

151468-29 May 2012, 151591-31 May 2012 

Спасибо за ответ

+0

Предполагаю, что это для SQL Server? –

+0

Является ли вывод чем-то, что вы хотите создать из SQL, или это можно сделать программным путем? – nageeb

+0

[Объединение строк в Transact-SQL] (http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/) –

ответ

1
declare @result varchar(max) = '' 

select @result = @result + ChallanNo + '-' + 
       CONVERT(VARCHAR(12),ChallanDate,106) + ',' 
from ... 

-- remove trailing , 
select left(@result, len(@result) - 1) 
+1

FWIW 'STUFF' против ведущей запятой - это гораздо более эффективный способ удалить его, чем использовать' LEFT' против задней запятой. Зачем? Ну, вам не нужно вычислять длину, для одного. :-) В этом случае это пренебрежимо мало, но в большем наборе данных, в котором много лишних циклов. –

2
SELECT STUFF((SELECT ', ' + CONVERT(VARCHAR(32), ChallanNo) 
    + '-' + CONVERT(CHAR(11), ChallanDate, 106) 
    FROM dbo.Challan WHERE ChallanID IN 
    (SELECT ChallanID FROM dbo.ChallanDetail WHERE PTUID = 42192) 
FOR XML PATH('')), 1, 2, ''); 
Смежные вопросы