Как Разделить Столбец Sql - PullRequest
0 голосов
/ 11 марта 2019

Я хочу поделиться столбцом таблицы SQL. Первый столбец будет содержать данные до 1-10, 11-20 во втором столбце и 21-30 в 3-м столбце в виде данных.

enter image description here

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

использовать условное агрегирование с case when expression

select max(case when pagenumber<11 then pagenumber end) as "1-10",
max(case when pagenumber<21 and pagenumber>10 then pagenumber end) as "11-20",
max(case when pagenumber<31 and pagenumber>20 then pagenumber end) as "21-30"
from tablename
0 голосов
/ 12 марта 2019

Я думаю, что в ответе fa06 отсутствует необходимая группа

select  
    max(case when (pagenumber-1)/10 = 0 then pagenumber end) as "1-10",
    max(case when (pagenumber-1)/10 = 1 then pagenumber end) as "11-20",
    max(case when (pagenumber-1)/10 = 2 then pagenumber end) as "21-30"
from t
group by (pagenumber%10)
order by 1

Я сделал разбивку математически, но вы также можете сделать что-то вроде:

select  
    max(case when pagenumber between 1 and 10 then pagenumber end) as "1-10",
    max(case when pagenumber between 11 and 20 then pagenumber end) as "11-20",
    max(case when pagenumber between 21 and 30 pagenumber end) as "21-30"
from t
group by (pagenumber%10)
order by 1

Группировка по (например) 1, 11 и 21 помещает в одну строку, потому что все они имеют одинаковый результат для операции мода: 1. 2, 12, 22 переходят в другую строку (результат мода равен 2) .

Если ваше требование касается, например, 1, 12 и 23 для всех в одной строке, вам придется усложнить группировку (найдите способ, чтобы математически все 1, 12 и 23 возвращали одно и то же значение .. как (x%10)-((x/10)+1))

...