Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
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
|
Цитата(Tonal @ 19.12.2008, 18:01) Link Не проще ли выдернуть все данные на клиента и там извращаться? да вот на клиенте хотелось простоты, 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, 19:21) Link ну а если бы там было не 23 а 1023? а я везучий А у тебя варианты есть? |
|
|
|
|
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
|
Цитата(AD @ 22.12.2008, 18:41) Link Покажи, пожалуйста, это преобразование на стороне клиента! Самому интересно увидеть решение! ну дык смотря какое нада, в данном случае я так понимаю надо будет из одного столбца расфасовать по нескольким столбцам? а конкретно во что пихать то нада? |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 7.12.2025, 13:11 |