FireBird: как преобразовать строки в столбцы? |
Здравствуйте, гость ( Вход | Регистрация )
FireBird: как преобразовать строки в столбцы? |
Litkevich Yuriy |
18.12.2008, 15:44
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Никак не дается мне одна задачка, может кто-нибудь направит на путь истинный (хотябы даже мысли в слух).
Дано: Хранимая Процедура (ХП) выбора FooProc(id INTEGER) возвращает набор данных (N строк) из одного столбца для заданного id
Задача: Сделать ХП MyProc(A INTEGER, B INTEGER) возвращаеющую набор данных (M строк) из N столбцов (по числу строк первой) плюс id в диаппазоне от A до B т.е.:
где N - фиксированное целое число ---- FireBird 2.0 |
|
|
Tonal |
19.12.2008, 15:01
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
В Firebird процедура должна возвращать фиксированное количество столбцов.
На версии 2.1 Можно извернутся с помощью EXECUTE STAIMENT + EXECUTE BLOCK + GTT но мне кажется это ужасный изврат. Не проще ли выдернуть все данные на клиента и там извращаться? П.С. В MS SQL & ORACL есть специальная конструкция PIVOT. Я не в курсе насчёт её стандартности. |
|
|
Litkevich Yuriy |
19.12.2008, 17:26
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Не проще ли выдернуть все данные на клиента и там извращаться? да вот на клиенте хотелось простоты, QSqlQueryModel + QTableViewСделал посредством двух процедур. Одна делает из столбца строку, а вторая делает нужное кол-во строк. вот так работает первая:
если не писать Sum то исходная таблица (содержащая один столбец) превращается в диагональную матрицу, в которой по диагонали размещаются значения исходной. Ну а с помощью Sum(case...) получаем строку из N столбцов. |
|
|
kuler |
22.12.2008, 11:27
Сообщение
#4
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
да вы батенька, извращенец!
|
|
|
Litkevich Yuriy |
22.12.2008, 14:53
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
kuler, а на более умную фразу знаний наскребешь?
|
|
|
kuler |
22.12.2008, 16:21
Сообщение
#6
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
ну а если бы там было не 23 а 1023?
|
|
|
Litkevich Yuriy |
22.12.2008, 16:49
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
kuler |
22.12.2008, 18:31
Сообщение
#8
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
возвращать
A val1 ... valn A+1 val1 ... valn ... преобразование на стороне клиента будет простейшим короче врядли sql предназначен для вывода большого множества столбцов а уж тем более переменного, это использование не по назначению. СУБД это не оперативная память где как хочешь измерения фигаришь |
|
|
AD |
22.12.2008, 18:41
Сообщение
#9
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Цитата(kuler) преобразование на стороне клиента будет простейшим короче врядли sql предназначен для вывода большого множества столбцов а уж тем более переменного, это использование не по назначению. СУБД это не оперативная память где как хочешь измерения фигаришь Покажи, пожалуйста, это преобразование на стороне клиента! Самому интересно увидеть решение! Буду благодарен, если откликнешься и напишешь код преобразования! |
|
|
kuler |
22.12.2008, 18:51
Сообщение
#10
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
Покажи, пожалуйста, это преобразование на стороне клиента! Самому интересно увидеть решение! Буду благодарен, если откликнешься и напишешь код преобразования! ну дык смотря какое нада, в данном случае я так понимаю надо будет из одного столбца расфасовать по нескольким столбцам? а конкретно во что пихать то нада? |
|
|
Текстовая версия | Сейчас: 29.11.2024, 5:18 |