2013-08-21 3 views
0

ли кто-нибудь знает простой способ создать стержень этого результата:SQL Server - простой способ создать стержень

[0-1] [1-2] [2-3] [3-4] 
12  45  29 5 

Этот результат создается с запросом:

SELECT [0-1] = SUM(CASE WHEN AGE >= 0 AND AGE <= 1 THEN 1 ELSE 0 END), 
     [1-2] = SUM(CASE WHEN AGE > 1 AND AGE <= 2 THEN 1 ELSE 0 END), 
     [2-3] = SUM(CASE WHEN AGE > 2 AND AGE <= 3 THEN 1 ELSE 0 END) 
    FROM dbo.Persons 

Я хочу, чтобы показать значения столбцов в виде строк, то есть вывод должен выглядеть так:

[0-1]  12 
[1-2]  45 
[2-3]  29 
[3-4]  5 

Ссылки на статьи/блоги также приветствуются. Пожалуйста, предложите простое и простое решение.

ответ

1

Вот способ, который использует cross join и агрегацию:

select ages.minage, ages.maxage, 
     sum(case when age > ages.minage and age <= ages.maxage then 1 else 0 end) as cnt 
from dbo.Persons cross join 
    (select -1 as minage, 1 as maxage union all 
     select 1, 2 union all 
     select 2, 3 
    ) as ages 
group by ages.minage, ages.maxage 

Мне нравится этот метод, потому что легко добавлять новые возрастные диапазоны. Обратите внимание, что это также включает диапазоны.

+0

получение ошибки: «Столбец« age.minage »недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY». – user1254053

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