Если вы не знаете, сколько у вас групп, и оператор CASE
не подходит, вы можете попробовать что-то вроде этого:
SELECT
CONVERT(VARCHAR(5),FLOOR(((diff+.001)*1.0)/10) *10) +
'-' + CONVERT(VARCHAR(5),(CEILING(((diff+.001)*1.0)/10) *10)-1),
count(*)
FROM
[Table]
GROUP BY
CONVERT(VARCHAR(5),FLOOR(((diff+.001)*1.0)/10) *10) +
'-' + CONVERT(VARCHAR(5),(CEILING(((diff+.001)*1.0)/10) *10)-1)
РЕДАКТИРОВАТЬ: Сделал это до того, как увидел ваши изменения и желаемый результат. Отсюда вы можете поместить его во временную таблицу и затем развернуть. Я могу помочь вам с этим, если вам нужно.
Ниже приведен код для перевода в нужный вам формат. Вы должны связываться с StartIndex
и EndIndex
, чтобы правильно распределить свои группы.
CREATE table #temp(DiffGroup varchar(15),StartIndex int, EndIndex int,Num int)
insert into #temp
SELECT
CONVERT(VARCHAR(5),(diff/10) *10) +'-' +CONVERT(VARCHAR(5),(CEILING(diff/10) *10)+9) DiffGroup,
(diff/10) *10 AS StartIndex,
(CEILING(diff/10) *10)+9 AS EndIndex,
count(*) AS Num
FROM
Table
GROUP BY
CONVERT(VARCHAR(5),(diff/10) *10) +'-' +CONVERT(VARCHAR(5),(CEILING(diff/10) *10)+9),
(diff/10) *10,
(CEILING(diff/10) *10)+9
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(DiffGroup)
FROM #temp c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + ' from
(
select DiffGroup
, Num
from #temp
) x
pivot
(
SUM(Num)
for DiffGroup in (' + @cols + ')
) p '
execute(@query)