0

次のクエリがあります。

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

返信ありがとうございます

4

2 に答える 2

2

SQL Server < 2017 のバージョンでは、サブクエリを使用する必要がSTUFFありましたFOR XML PATH

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(''), 
TYPE).value(N'./text()[1]', N'varchar(max)'), 1, 2, '');

2017 以降では、次のように切り替える必要がありますSTRING_AGG()

SELECT STRING_AGG(CONCAT(c.ChallanNo, '-',
    CONVERT(char(11), c.ChallanDate, 106)), ', ')
  FROM dbo.Challan AS c
  WHERE EXISTS 
  (
    SELECT 1 FROM dbo.ChallanDetail AS cd
    WHERE cd.ChallanID = c.ChallanID
    AND cd.PTUID = 42192
  );
于 2012-06-07T06:20:33.277 に答える
1
declare @result varchar(max) = ''

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

-- remove trailing ,
select left(@result, len(@result) - 1)
于 2012-06-07T06:06:28.657 に答える