Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 как написать перекрестный запрос в oracle  [new]
Juliett
Member

Откуда:
Сообщений: 16
есть таблица tbl:
nm      mon     cnt
Вася янв 5
Петя янв 8
Вася фев 15
Миша фев 11
Миша мар 9

хочу получить:
            янв         фев       мар
Вася 5 15 0
Петя 8 0 0
Миша 0 11 9

но так, чтобы количество столбцов менялось в зависимости от заданного периода, то есть если выберу янв и фев, то получится

            янв         фев    
Вася 5 15
Петя 8 0
Миша 0 11

как написать запрос, чтобы работало именно так?

если пишу

select nm,
sum((case when mon='янв' then cnt else 0 end)) "янв",
sum((case when mon='фев' then cnt else 0 end)) "фев",
sum((case when mon='мар' then cnt else 0 end)) "мар"
from tbl
group by nm

то получается примерно то, что надо, но в таком случае для каждого периода надо писать свой запрос, что не есть удобно.

в Access бывают перекрестные запросы, в которых меняется количество колонок, а вот как сделать что-то подобное в Oracle? может, кто-нибудь знает? подскажите плз :)
17 окт 06, 12:11    [3269951]     Ответить | Цитировать Сообщить модератору
 Re: как написать перекрестный запрос в oracle  [new]
LVA
Member

Откуда: Санкт-Петербург
Сообщений: 231
программное конструирование подобных запросов и последующее их выполнение через динамический SQL.
В разделе FAQ есть примеры и даже готовая процедура
17 окт 06, 12:15    [3269977]     Ответить | Цитировать Сообщить модератору
 Re: как написать перекрестный запрос в oracle  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1489
Транспонирование строк в столбцы в ref-cursor-е

З.Ы.
Читайте больше F.A.Q. и топ популярных вопросов, ибо это как в детском мультике: "Лучше день потерять, зато потОм за 5 минут долететь!"(с) (Крылья, Ноги, Хвосты)
17 окт 06, 12:15    [3269979]     Ответить | Цитировать Сообщить модератору
 Re: как написать перекрестный запрос в oracle  [new]
Juliett
Member

Откуда:
Сообщений: 16
Щукина Анна
Транспонирование строк в столбцы в ref-cursor-е

З.Ы.
Читайте больше F.A.Q. и топ популярных вопросов, ибо это как в детском мультике: "Лучше день потерять, зато потОм за 5 минут долететь!"(с) (Крылья, Ноги, Хвосты)

читала я этот F.A.Q. еще перед тем как спросить. но там все так непонятно :(
где надо писать
create or replace package pkg_crosstab
и где потом вызывать pivot из этого самого package?

у меня есть база, а запросы к ней пишу в SQL Navigator... а результат запроса потом экспортом в ecxel на радость бухгалтерам
17 окт 06, 13:26    [3270528]     Ответить | Цитировать Сообщить модератору
 Re: как написать перекрестный запрос в oracle  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
Juliett
читала я этот F.A.Q. еще перед тем как спросить. но там все так непонятно :(
где надо писать
create or replace package pkg_crosstab
и где потом вызывать pivot из этого самого package?

у меня есть база, а запросы к ней пишу в SQL Navigator... а результат запроса потом экспортом в ecxel на радость бухгалтерам
Может вам тогда делать сводную таблицу в экселе?

А то рассказ про "где писать" и "где вызывать" может затянуться и перейдет в лекцию "с чего начать работу в Оракле".
Это совсем базовые вещи.
17 окт 06, 14:35    [3271044]     Ответить | Цитировать Сообщить модератору
 Re: как написать перекрестный запрос в oracle  [new]
Juliett
Member

Откуда:
Сообщений: 16
Bely

Может вам тогда делать сводную таблицу в экселе?

А то рассказ про "где писать" и "где вызывать" может затянуться и перейдет в лекцию "с чего начать работу в Оракле".
Это совсем базовые вещи.

Bely, если честно, ненавижу эксель. почему-то.
а про совсем базовые вещи - интересно :) может, это можно где-то почитать?
с Оракле действительно практически не работала, сейчас иногда запросы пишу, но хочется чего-то поинтереснее узнать. Вот интуитивно чувствую, что не знаю очень много, надо ж с этим бороться :)
17 окт 06, 14:50    [3271181]     Ответить | Цитировать Сообщить модератору
 Re: как написать перекрестный запрос в oracle  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
Juliett
может, это можно где-то почитать?
с Оракле действительно практически не работала, сейчас иногда запросы пишу, но хочется чего-то поинтереснее узнать. Вот интуитивно чувствую, что не знаю очень много, надо ж с этим бороться :)

Начать можно, например, с этих книг:
Oracle PL/SQL для профессионалов
101 Oracle PL/SQL. Как написать мощные и гибкие программы на PL/SQL
17 окт 06, 16:44    [3272160]     Ответить | Цитировать Сообщить модератору
 Re: как написать перекрестный запрос в oracle  [new]
Juliett
Member

Откуда:
Сообщений: 16
Bely

Начать можно, например, с этих книг:
Oracle PL/SQL для профессионалов
101 Oracle PL/SQL. Как написать мощные и гибкие программы на PL/SQL

а в электронке? :)
17 окт 06, 17:38    [3272692]     Ответить | Цитировать Сообщить модератору
 Re: как написать перекрестный запрос в oracle  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
Juliett
Bely

Начать можно, например, с этих книг:
Oracle PL/SQL для профессионалов
101 Oracle PL/SQL. Как написать мощные и гибкие программы на PL/SQL

а в электронке? :)
Учимся пользоваться поиском
17 окт 06, 21:36    [3273735]     Ответить | Цитировать Сообщить модератору
 Re: как написать перекрестный запрос в oracle  [new]
Juliett
Member

Откуда:
Сообщений: 16
Bely, спасибо :)
уже тянется, почитаю :)
18 окт 06, 11:53    [3275588]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить