powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите создать запрос!
8 сообщений из 8, страница 1 из 1
Помогите создать запрос!
    #34280135
Vitaliy Os
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица:
id........type........value
---------------------------------
12......Street..........Gagarina
12......City.............Kiev
12......Region.........Good
14......Street..........Volya
14......City.............Riga
3.......Street..........Duma
3.......City.............London
3.......Square.........800
3.......Rooms..........7
3.......Price............3000

Нужно ее как-то "транспонировать" в:

id.....Street........City.......Region.......Square.......Rooms......Price
-----------------------------------------------------------------
12...Gagarina......Kiev.......Good.............-................-...........-
14...Volya..........Riga.........-..............- .................- ...........-
3.....Duma.........London......- .............800..............7.........3000


Наверное, несложный вопрос, но все-таки прошу ответить!
Спасибо!
...
Рейтинг: 0 / 0
Помогите создать запрос!
    #34280173
victor_kr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос сложный. :) Наверное, в SQL такого сделать нельзя. Если можно, то мне тоже хотелось бы знать как. :) Возможные решения: динамическое формирование конечного запроса на основании данных предварительного; анализ результатов запроса на клиенте, создание и заполнение таблицы с нужной структурой.
...
Рейтинг: 0 / 0
Помогите создать запрос!
    #34280292
marx_freedom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
найдите в сети книгу SQL Hacks (By Andrew Cumming, Gordon Russell, из-во O'Reilly, 2006) - там в 7 главе есть очень похожие запросы с помощью join.



--
Солнце встанет непременно!
jabber id: marx [.at.] jabber [.dot.] ru
...
Рейтинг: 0 / 0
Помогите создать запрос!
    #34280351
resu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кажется в CONTRIBS есть что-то на ету тему, если нет, то
если "TYPE" конечное, то думаю где-то так:

.........
declare
r <ваш_тип>;
begin
for i in SELECT DISTINCT id FROM t
loop
for j in select * from t where id = i.id
loop
if j.type = 'Street' then
r.Street := j.value;
end if;
......
......
......
end loop;
return next r;
end loop;
................
...
Рейтинг: 0 / 0
Помогите создать запрос!
    #34280523
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если количество атрибутов (уникальных значений поля TYPE) невелико, то такой запрос очень легко (я бы даже сказал: элементарно) получается при помощи CASE в select-листе + итоговая группировка по ID.
...
Рейтинг: 0 / 0
Помогите создать запрос!
    #34280526
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тынц - иллюстрация идеи
...
Рейтинг: 0 / 0
Помогите создать запрос!
    #34280861
Vitaliy Os
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бабичев СергейЕсли количество атрибутов (уникальных значений поля TYPE) невелико, то такой запрос очень легко (я бы даже сказал: элементарно) получается при помощи CASE в select-листе + итоговая группировка по ID.

А если количество атрибутов ~30-50 а записей (ID) ~ около 50 000? Будет ли быстро работать? Нужен вывод таблицы за время порядка 1 секунды. Я понимаю, что это еще зависит от многих факторов (индексов, структуры базы...), но все-же, что можете сказать по этому поводу?
PostgreSQL 8.2
...
Рейтинг: 0 / 0
Помогите создать запрос!
    #34281179
resu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
денормализировать базу => создать доп. таблицу (Т2) в нужном формате, совать туда данные указанными методами из основной таблици (Т1), а выборку (из соображений скорости ответа) брать из вспомогательной таблицы (Т2)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите создать запрос!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]