Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание групп данных.  [new]
d.guryev
Member

Откуда: Москва
Сообщений: 29
Коллеги, добрый день,

Нужна ваша помощь.

Имеется некоторый массив данных:

abc
0.06951 0.39549 Null
0.05038 0.13413 Null
0.06817 0.70597 Null
0.06927 0.51654 Null
0.07230 0.71426 Null
0.07486 0.36418 Null
0.07601 3.49102 Null
0.07427 0.51308 Null
0.05880 0.05726 Null


Задача состоит в том, чтобы разделить значения в столбце "b" на группы. Пример: где 0<b<=0.5 с = 1, 0.5<b<=1 c = 2 и т.д. Количество групп может варьироваться, шиксированным же определяется только шаг = 0.5. Возможно ли это сделать как-нибудь красиво, а не через case when и т.п.?
30 май 13, 15:07    [14370697]     Ответить | Цитировать Сообщить модератору
 Re: Создание групп данных.  [new]
Glory
Member

Откуда:
Сообщений: 104751
d.guryev
Пример: где 0<b<=0.5 с = 1, 0.5<b<=1 c = 2 и т.д.

Это пример того, что вы хотите получить на экране ?
30 май 13, 15:13    [14370767]     Ответить | Цитировать Сообщить модератору
 Re: Создание групп данных.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
разделить на 0.5
?
30 май 13, 15:13    [14370772]     Ответить | Цитировать Сообщить модератору
 Re: Создание групп данных.  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
d.guryev,
select b, floor(b/0.5) from mytable
30 май 13, 15:15    [14370790]     Ответить | Цитировать Сообщить модератору
 Re: Создание групп данных.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
WITH CTE AS(SELECT * FROM(VALUES
 (0.06951,0.39549)
,(0.05038,0.13413)
,(0.06817,0.70597)
,(0.06927,0.51654)
,(0.07230,0.71426)
,(0.07486,0.36418)
,(0.07601,3.49102)
,(0.07427,0.51308)
,(0.05880,0.05726)
)T(a,b)
)
SELECT *,c=DENSE_RANK()OVER(ORDER BY FLOOR(b/0.5))
FROM CTE
ORDER BY b;
30 май 13, 15:20    [14370838]     Ответить | Цитировать Сообщить модератору
 Re: Создание групп данных.  [new]
шерстяная кефаль
Guest
iap
WITH CTE AS(SELECT * FROM(VALUES
 (0.06951,0.39549)
,(0.05038,0.13413)
,(0.06817,0.70597)
,(0.06927,0.51654)
,(0.07230,0.71426)
,(0.07486,0.36418)
,(0.07601,3.49102)
,(0.07427,0.51308)
,(0.05880,0.05726)
)T(a,b)
)
SELECT *,c=DENSE_RANK()OVER(ORDER BY FLOOR(b/0.5))
FROM CTE
ORDER BY b;


края не верно учитывает, когда границы промежутков во входном наборе
30 май 13, 16:07    [14371213]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить