2013-11-25 3 views
0

Я переписал этот вопрос, чтобы быть более простым. У меня есть SQL-запрос:Объединение нескольких дат в одну ячейку varchar

SELECT CAST(CASE WHEN DTH.DoubleBookedFlag = 1 THEN DTH.ActivityDate END AS VARCHAR(MAX)) AS DoubleBookedHours 
FROM DailyTaskHours DTH 
WHERE DTH.DoubleBookedFlag = 1 

Вот результат:

enter image description here

Вместо того, чтобы вернуться в несколько строк, я хотел бы все, что вернулся, чтобы быть один длинный конкатенации строк в одном VARCHAR поле, разделенное символом типа |.

Как я могу это достичь?

+0

Проверьте это [вопрос] (http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-microsoft-sql-server-2005) out – OGHaza

ответ

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) 
+0

Это все еще возвращает несколько строк. –

0

Вы можете добавить в varchar что-то похожее на следующее. Кстати, оператор CASE в вашем коде не нужен. Двойной забронированный флаг всегда будет 1, потому что вы указываете это в своем предложении WHERE.

DECLARE @test varchar(max) 
SELECT @test = '' 

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

SELECT @test 
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 

Кроме того, ниже запрос также даст тот же результат, CASE не требуется, чтобы получить выход, как мы задаете те же условия в ИНЕКЕ

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

демо обоих запросов на http://sqlfiddle.com/#!2/19651/23

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