我已经重写了这个问题更直截了当。我有一个SQL查询:
SELECT CAST(CASE WHEN DTH.DoubleBookedFlag = 1 THEN DTH.ActivityDate END AS VARCHAR(MAX)) AS DoubleBookedHours
FROM DailyTaskHours DTH
WHERE DTH.DoubleBookedFlag = 1
结果如下:
我不希望返回多行,而是希望返回的内容是单个VARCHAR字段中的一个长连接字符串,而不是像|。
这样的字符。我怎样才能做到这一点?
答案 0 :(得分:0)
SELECT DTH.ActivityDate, STUFF(List, 1 ,2, '')
FROM DailyTaskHours DTH
CROSS APPLY ( SELECT ', ' + CAST(DTH.ActivityDate AS NVARCHAR) [text()]
FROM DailyTaskHours
WHERE DTH.ActivityDate = 1
AND SomeRefrencingColum = DTH.SomeRefrencingColum
FOR XML PATH('')
) Q(List)
答案 1 :(得分:0)
您可以使用类似于以下内容的方式附加到varchar。顺便说一下,代码中的CASE语句是不必要的。双重预订标志将始终为1,因为您在WHERE子句中指定了该标志。
DECLARE @test varchar(max)
SELECT @test = ''
SELECT @test = @test + '|' + CONVERT(varchar, DTH.ActivityDate, 101) FROM DailyTaskHours DTH
SELECT @test
答案 2 :(得分:0)
您可以使用GROUP_CONCAT函数在一个字段中获取结果,如下所示,
SELECT GROUP_CONCAT(
(CASE WHEN DTH.DoubleBookedFlag=1 THEN DTH.ActivityDate END)
SEPARATOR ' | ')
as DailyTaskHours
FROM
DailyTaskHours as DTH
WHERE
DTH.DoubleBookedFlag = 1
此外,下面的查询也会给出相同的结果,因为我们在Where子句中指定了相同的条件,所以不需要CASE来获取输出
SELECT GROUP_CONCAT(DTH.ActivityDate SEPARATOR ' | ') as DailyTaskHours
FROM
DailyTaskHours as DTH
WHERE
DTH.DoubleBookedFlag = 1
的两个查询的演示