Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [PostgreSQL]Запросы в сводной таблице Excel, Мне нужно похожий 
:(
    Опции темы
RockClimber
Дата 29.5.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Я слышал, что сводная таблица Excel использует совсем простенькие sql-запросы. Но она умеет то, чего не умею я, а именно:
Есть таблица со списком клиентов: Иванов, Петров и т. д. (поля id, fio) Есть таблица с их телефонами и комментариями к телефону - домашний, мобильный и т. д. (поля id, client_id, phone_number, description).
Исходные данные:
Таблица 1
id   fio
1    Иванов
2    Петров
3    Сидоров

Таблица 2
id   client_id   phone_number   description
1    1           1234567        домашний
2    1           7654321        мобильный
3    2           9876543        рабочий
4    2           3456789        домашний
5    3           2545684        мобильный
6    3           3254942        рабочий

Результат
fio       домашний     мобильный      рабочий
Иванов     1234567     7654321
Петров     3456789                 9876543
Сидоров                2545684     3254942

В Excel из простой таблицы с помощью сводных таблиц такие вещи делаются довольно легко, а вот как такое написать на sql?



--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
Akina
Дата 29.5.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Читаем справку по Pivot Query - если твой диалект SQL их поддерживает.
Вот, к примеру, что состряпал Аксесс:

Код

TRANSFORM First(table2.phone_number) AS Result
SELECT table1.fio
FROM table1 INNER JOIN table2 ON table1.id = table2.client_id
GROUP BY table1.fio
PIVOT table2.description;



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
skyboy
Дата 29.5.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



развернуть в результат, при том, что список "описаний" заранее неизвестен? 
только средствами sql без использования динамических запросов невозможно.
PM MAIL   Вверх
RockClimber
Дата 29.5.2008, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



А динамические запросы - это что?
Забыл сказать - база PostgreSQL.


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
skyboy
Дата 29.5.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



RockClimber, и все-так уточни: у тебя список значений в поле "примечания" ограничен и заранее определен? или там может быть все, что угодно?
Цитата(RockClimber @  29.5.2008,  11:38 Найти цитируемый пост)
. Но она умеет то, чего не умею я

дык, Excel - не просто (довольно простое функционально)СУБД, это ещё и клиент для обработки и отображения.
PM MAIL   Вверх
RockClimber
Дата 29.5.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Теоретически - все что угодно. На практике - порядка 20 разных значений, но сколько точно, я не знаю. В принципе, можно выдрать все возможные значения заранее и считать, что их число конечно и известно.


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
RockClimber
Дата 29.5.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Нашел описание постгришной функции crosstab здесь (пункт F.29.1.4.).
Полный текст запроса:
Код

SELECT * FROM crosstab(
'select    data_clients.client_fio, 
    data_clients_adres.adres_type, data_clients_adres.adres_full, data_clients_adres.adres_city, 
    data_credits.credit_number
from    data_clients, data_credits, data_clients_adres
where    data_clients.internalid = data_credits.client_id and data_clients.internalid = data_clients_adres.client_id', 
    'select distinct adres_type from data_clients_adres')

Возникает ошибка "ERROR:  function crosstab("unknown", "unknown") does not exist". Или этот вопрос лучше в подфорум по Postgre задавать?


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.