2015-04-30 4 views
3

У меня есть следующая таблица с двумя полями:SQL Server 2008 R2: Показать день даты в запятую колонке

create table test_t 
(
cola varchar(10), 
coldate date 
); 

Вставка некоторых записей:

insert into test_t values('A','1-1-2010'), 
         ('A','2-1-2010'), 
         ('A','4-1-2010'), 
         ('B','6-1-2010'), 
         ('B','8-1-2010'), 
         ('C','10-1-2010'), 
         ('D','11-1-2010'); 

Примечание: Теперь я хочу для отображения значений cola, которые относятся к 2 - 3 дням. И хотите, чтобы отображал этот день в столбце с разделителями-запятыми, как показано ниже, в ожидаемой ouptput.

Ожидаемый результат:

cola Dates_Day 
------------------ 
A  1,2,4 
B  6,8 
+1

возможный дубликат http://stackoverflow.com/questions/194852/concatenate-many-rows -into-a-single-text-string –

+0

@Paresh J, Nope! Это с другим условием. – MAK

ответ

3

Попробуйте

select t1.cola, stuff((SELECT ',' + right(convert(varchar(5),t2.coldate,3),2) from 
test_t t2 where t2.cola = t1.cola FOR XML PATH('')),1,1,'') AS Dates_Day 
from test_t t1 
group by t1.cola 
+0

Как избежать префикса 0 в одинарных цифрах?. http://www.sqlfiddle.com/#!6/09779/1 – Veera

+0

извините, но я не знаю, как удалить префикс 0 для одной цифры –

1
SELECT DISTINCT 
COLA, 
STUFF ((SELECT ','+ CONVERT(VARCHAR,RIGHT(LEFT(COLDATE,7),2)) FROM TEST_T B WHERE A.COLA = B.COLA FOR XML PATH('')),1,1,'') AS [Dates_Day] 
FROM TEST_T A 
0
select COLA, 
    listagg(TO_CHAR(COLDATE,'DD'),',') within group (order by COLDATE) AS CDAY 
    from TEST_T 
    group by COLA; 
Смежные вопросы