Возвращать результаты SQL-запроса в отдельных столбцах, отсортированных по вертикали - PullRequest
0 голосов
/ 03 апреля 2009

Как мне переписать запрос " select col1 from tbl1 ", чтобы он разбивал результаты на три столбца - каждый столбец сортировал результаты по вертикали?

Так что, если данные, которые я получаю, это:

aaa
bbb
ccc
ddd
eee
fff
ggg

Мне нужен запрос, чтобы вернуть его как:

aaa  ddd  ggg
bbb  eee
ccc  fff

Возможно ли это? Спасибо

Ответы [ 3 ]

10 голосов
/ 03 апреля 2009

По правде говоря, этого нельзя делать в SQL. Если спаривание aaa, ddd и ggg не имеет какого-либо значения, тогда это форматирование на стороне клиента и не должно выполняться на сервере.

EDIT:

В интересах интеллектуальных упражнений что-то вроде этого, похоже, работает.

select
    f1.data, f2.data, f3. data

from (select data, ROW_NUMBER() over (order by data) as row_num from your_table) f1

left join (select data, ROW_NUMBER() over (order by data) as row_num from your_table) f2 on f2.row_num = f1.row_num + (select CEILING(COUNT(1) / 3) + 1 from your_table)
left join (select data, ROW_NUMBER() over (order by data) as row_num from your_table) f3 on f3.row_num = f1.row_num + (select CEILING(COUNT(1) / 3) + 1 from your_table) * 2

where f1.row_num between 1 and FLOOR((select COUNT(1) from your_table) / 3) + 1

Но, опять же, я подозреваю, что это действительно то, что должно быть сделано на стороне клиента, а не в SQL.

3 голосов
/ 03 апреля 2009

Это похоже на то, что вы должны обработать в приложении. Если нет конкретной причины, почему вы не можете этого сделать, я бы посоветовал вам разобраться с этим там.

1 голос
/ 03 апреля 2009

Если это только для форматирования, то Адам прав, вы должны сделать это на стороне клиента.

Если это связано с данными (я предполагаю, что aaa и bbb не являются вашими фактическими данными), то вы можете рассмотреть что-то вроде стержня SQL для изменения порядка данных.

Вот пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...