Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 18:24 18.05.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема Dynamic Rows -> Columns  
Автор EroS (новак)
Публикувано25.07.08 10:30



Здравейте,

имам едно въпросче за една заявка и се надявам все някой да може да помогне. Ето и какво ми представлява таблицата (базата е Oracle 10g):

ERROR_STATS:
type NUMBER
message VARCHAR2
error_date DATE

Трябва ми заявка, която да изглежда така горе-долу:

TYPE | MESSAGE | MONTH1_CNT | MONTH2_CNT |...|MONTHn_CNT ,

където МОNTH1 и MONTHn са месеците от старт-дата до край-дата, зададени като параметри. Използвам това, за да взема месеците:

SELECT ADD_MONTHS(TRUNC(:p_start_date,'MM'),L-1) AS MONTHS
FROM (SELECT LEVEL L
FROM DUAL
CONNECT BY LEVEL <= MONTHS_BETWEEN(ADD_MONTHS(TRUNC(:p_end_date,'MM'),1),TRUNC(:p_start_date,'MM')));

(незнам дали е от полза)

Направих заявка, която ми изкарва:

ТYPE | MESSAGE | MONTH | CNT

но не знам как да прехвърля редовете в колони. Търсих из нет-а, но не намерих нищо за променлив брой редове.

Идеи?

Благодаря предварително!



Тема Re: Dynamic Rows -> Columnsнови [re: EroS]  
Автор headhunter (huntz orcxez)
Публикувано28.07.08 13:14



Трябва да си поиграеш с case.


select type,
message,
case when month = 'month1' then cnt
else null
end as month1_cnt,
case when month = 'month2' then cnt
else null
end as month2_cnt,
...
...


можеш да помислиш за динамичен SQL i функция, която връща таблица.

General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!

Тема Re: Dynamic Rows -> Columnsнови [re: EroS]  
Автор AйeзCeдaй ((бойна))
Публикувано28.07.08 15:50



Нещо не разбрах...(ама простено мие, че днес е сефтето след отпуска)



иде реч за тия месеци....
предполагам, че грешка от тип 10 (примерно) с месидж "грешка....", ще се повтаря много, много пъти. Т.е за тази грешка ще имаш повторение 20 пъти с различна дата....
и искаш????

тази грешка в кои месеци се появява и евентуално колко часа. Щото от DATE можеш да си вземеш и часа...



Тема Re: Dynamic Rows -> Columnsнови [re: AйeзCeдaй]  
Автор EroS (новак)
Публикувано29.07.08 09:18



Горе долу :-)

Идеята е следната: имам WebApp, което при exception лог-ва в база. И искам репорт за грешките по месеци, т.е. 10 за май, 13 за юни, т.н. Но искам заявката да приема два параметъра - старт дата и енд дата, т.е. да зима месеците между тях ключително и да си прави групирането. Ватианта от предния пост за съжаления не става, понеже незнам точния брой на колоните, а с PL/SQL функция и return type table може и да стане, трябва да го пробвам.



Тема Re: Dynamic Rows -> Columnsнови [re: EroS]  
Автор AйeзCeдaй ((бойна))
Публикувано29.07.08 10:00



Ето ти едно решение

SELECT ES.TYPE,ES.MESSAGE,TO_NUMBER(TO_CHAR(ES.ERROR_DATE,'mm')) MONTH, COUNT(ES.TYPE) ERRORSPERMOUNTH
FROM ERROR_STATS ES
where es.error_date between :p_startdate and :p_enddate
GROUP BY ES.TYPE,ES.MESSAGE,TO_NUMBER(TO_CHAR(ES.ERROR_DATE,'mm'))
ORDER BY TO_NUMBER(TO_CHAR(ES.ERROR_DATE,'mm'))

Пробвай го...



Тема Re: Dynamic Rows -> Columnsнови [re: AйeзCeдaй]  
Автор EroS (новак)
Публикувано29.07.08 10:08



Да, това изкарва точно данните, които ми трябват, но не и в точния формат. Искам след като са групирани по type и message, за всеки месец да се добави колона и съответната стоийност в нея, т.е. за един тип, едно съобщение да има един единствен ред, с n на брой колони, символизиращи месеците. Проблема се явява от динамичността на броя n на месеците. Явно трябва да се прибегне до PL/SQL и функция, връщаща table.



Тема Re: Dynamic Rows -> Columnsнови [re: EroS]  
Автор AйeзCeдaй ((бойна))
Публикувано29.07.08 11:59



Ми селекта ми горе си е баш PL/SQL
Няма никакъв проблем и какво значение колко ще са месеците?
Просто се изисква малко повечко игра и

мислене

Сега и аз се боря с един шибан PACKAGE. КАто го напиша и тествам ще ти драсна за идеята ми...



Тема Re: Dynamic Rows -> Columnsнови [re: AйeзCeдaй]  
Автор headhunter (huntz orcxez)
Публикувано29.07.08 16:01



Aз доколкото разбрах човека иска месеците да са му колони, а сумите в 1 ред.
Т.е. нещо такова:


june | july | aug | sept | oct | nov | dec
23 2 21 28 11 9 15


General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!

Тема Re: Dynamic Rows -> Columnsнови [re: headhunter]  
Автор EroS (новак)
Публикувано29.07.08 16:22



Toчно това искам :-)

Пробвах с PL/SQL функция, но тъй като трябва да променям типа на резултата, предпочитам да е по друг начин. Идеи?



Тема Re: Dynamic Rows -> Columnsнови [re: EroS]  
Автор NDeu (динозавър)
Публикувано29.07.08 16:56



Не съм запознат с Оракъл, затова една идея по принцип


Направи функция, която ти връща ред:
type NUMBER
message VARCHAR2
CntsByMonth varchar(колкото ти трябва)

като в CntsByMonth записваш стойностите на бройките като ползваш някакъв разделител (напр. #9) по който да си ги разделиш на клиента.




Страници по тази тема: 1 | 2 | >> (покажи всички)
Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.