2014-10-02 2 views
0

Я хочу подсчитать количество записей, которые попадают под столбец csv, а также хотят отображать их в отдельности.Count с CSV с использованием SQL Server 2008 R2

Пример:

Таблица:

create table test1 
(
cola int, 
colb varchar(10) 
) 

Некоторые записи:

insert into test1 values(1,'SAM'); 
insert into test1 values(2,'SAM'); 
insert into test1 values(3,'JACK'); 
insert into test1 values(4,'MAK'); 

Сценарий:

with cte (colb) 
AS 
(
    SELECT SUBSTRING(
    (SELECT ',' + s.colb 
    FROM test1 as s 
    ORDER BY s.colb 
    FOR XML PATH('')),2,200) AS CSV 
) 
select count(*) as NumberOfNames,colb as Names 
from cte 
group by colb 

Результат:

NumberOfNames   Names 
----------------------------------- 
    1   JACK,MAK,SAM,SAM 

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

NumberOfNames   Names 
----------------------------------- 
    3    JACK,MAK,SAM 

ответ

1

Ваш CTE только присоединяет Имена и не сосчитать. Основываясь на вашем примере запрос может выглядеть так:

SELECT COUNT(DISTINCT colb) AS NumberOfNames, 
(SELECT STUFF((SELECT ',' + s.colb FROM test1 as s ORDER BY s.colb FOR XML PATH('')), 1, 1, '')) AS CSV 
FROM test1 

Результат:

NumberOfNames CSV 
------------- ---------------- 
3    JACK,MAK,SAM,SAM 

где используется функция STUFF для удаления первой запятой.

+0

Спасибо так много. – Meem

0

Как об этом ....

Declare @tempVariable as Varchar(100) 
Select @tempVariable= coalesce(@tempVariable+',','')+ colb 
from 
(
    Select distinct colb from test1 
) as te 
Select len(@tempVariable) - len(replace(@tempVariable, ',', ''))+1, @tempVariable 

Результат:

NumberOfNames CSV 
3    JACK,MAK,SAM 
Смежные вопросы