Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将多个日期连接到单个varchar单元格中_Sql_Sql Server - Fatal编程技术网

Sql 将多个日期连接到单个varchar单元格中

Sql 将多个日期连接到单个varchar单元格中,sql,sql-server,Sql,Sql Server,我把这个问题改写得更直截了当。我有一个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字段中的一个长串接字符串,由类似|的字符分隔

我把这个问题改写得更直截了当。我有一个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字段中的一个长串接字符串,由类似|的字符分隔


如何实现这一点?

您可以使用类似于以下内容的内容附加到varchar。顺便说一句,代码中的CASE语句是不必要的。double booked标志将始终为1,因为您在WHERE子句中指定了该标志

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)
DECLARE @test varchar(max) 
SELECT @test = ''

SELECT @test = @test + '|' + CONVERT(varchar, DTH.ActivityDate, 101)  FROM DailyTaskHours DTH

SELECT @test

您可以使用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
此外,下面的查询也将给出相同的结果,不需要CASE来获得输出,因为我们在Where子句中指定了相同的条件

SELECT GROUP_CONCAT(DTH.ActivityDate SEPARATOR ' | ') as DailyTaskHours
FROM 
DailyTaskHours as DTH
WHERE 
DTH.DoubleBookedFlag = 1

中演示这两个查询检查此输出仍返回多行。