C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Вопрос на запрос
full_lamer
Отправлено: 13.05.2004, 22:13


Машинист паровоза

Группа: Участник
Сообщений: 225



Доброго времени!
У меня вопрос на засыпку: как можно сделать такой запрос, который смог бы сгрузить 20 полей таблицы в таблицу с 1 полем... Я просто плохо могу объяснять лучше изображу:
Исходная таблица:
F1 F2 F3
11 21 31
12 22 32
Необходимо получить следующее:
F0
11
21
31
12
22
32
Valdemar
Отправлено: 14.05.2004, 07:33


Мастер участка

Группа: Участник
Сообщений: 433



Простым запросом, по моему, это сделать не получиться. Можно сделать два цикла, один вложен в другой. Внешний цикл проходит по записям таблицы, а внутренний — по полям каждой записи. И во внутреннем цикле делать вставку значения поля в новую таблицу с одним полем.
Если ваша СУБД поддерживает хранимые процедуры, то можно использовать их.
full_lamer
Отправлено: 14.05.2004, 08:34


Машинист паровоза

Группа: Участник
Сообщений: 225



Не могли бы Вы помочь с кодом? У меня IB6.5... Я плохо знаю скрипт хранимых процедур....

ЗЫ. Можно без "ВЫ", спасибо...
Gedeon
Отправлено: 14.05.2004, 08:56


Ветеран

Группа: Модератор
Сообщений: 1742



Так должно подойти
SQL
SELECT F1 AS F0 FROM YourTable UNION
SELECT F2 FROM YourTable UNION
SELECT F3 FROM YourTable

Типы данных в столбцах само собой д.б. одинаковые.

Отредактировано Gedeon — 14/05/2004, 10:00
full_lamer
Отправлено: 14.05.2004, 09:05


Машинист паровоза

Группа: Участник
Сообщений: 225



Спасибо!
Еще вопрос: как можно суммировать Double Precision?
У меня ошибка возникает.... sad.gif
full_lamer
Отправлено: 14.05.2004, 09:16


Машинист паровоза

Группа: Участник
Сообщений: 225



Объединение работает — СПАСИБО!
Только вопрос: как сделать сортировку?
Gedeon
Отправлено: 14.05.2004, 10:14


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (full_lamer @ 14/05/2004, 10:18)
Объединение работает — СПАСИБО!
Только вопрос: как сделать сортировку?

Создавать временную таблицу, заносить в нее данные полученные предыдущим запрсом, делать из нее выборку, указывая ORDER BY. Насчет IB я вообще говоря тебе не помошник и не в курсе можно ли там создавать временные таблицы, если нет то тада создаешь обычную и после удаляешь, ИМХО проще наверное все таки через ХП.
full_lamer
Отправлено: 14.05.2004, 10:44


Машинист паровоза

Группа: Участник
Сообщений: 225



А если так: выгрузить все это в DataSource и потом запросом в DataSource уже с сортировкой?

ЗЫ. Что такое "ХП"?
full_lamer
Отправлено: 14.05.2004, 10:51


Машинист паровоза

Группа: Участник
Сообщений: 225



Так как же можно суммировать Double Precision?
Valdemar
Отправлено: 15.05.2004, 16:36


Мастер участка

Группа: Участник
Сообщений: 433



full_lamer, если не секрет, то что это такое большое вы считаете, если у вас возникает ошибка (наверное переполнение)? А ведь Double Precision это 18 разрядов. Я даже названия токого числа не знаю smile.gif.
Если делать суммирование не средствами СУБД, а самому, то можно найти в Интернете библиотеки, для работы с очень большими числами.
full_lamer
Отправлено: 15.05.2004, 18:54


Машинист паровоза

Группа: Участник
Сообщений: 225



Нет, уже все нормально — ведь я себя так не даром назвал — просто не так использовал запрос пытался вывести одновременно сумму и список фамилий, а потом еще и удивлялся, что же он не работает.... wink.gif

Вернуться в Работа с базами данных в C++Builder