Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Firebird i crosstab upit

[es] :: Firebird/Interbase :: Firebird i crosstab upit

[ Pregleda: 1512 | Odgovora: 8 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nnele
nebojsa susic

Član broj: 145790
Poruke: 8
*.eunet.yu.



Profil

icon Firebird i crosstab upit18.05.2007. u 13:55

Pozdrav,

Da li je uopste moguce u firebird-u napraviti crosstab upit kao u accessu? (transform i pivot)

Dakle, uprosceno, hocu da uradim sledece

tabela1

a 1 10
a 2 20
a 3 30
b 1 40
c 1 50
d 2 60


tabela2
1 aaaa
2 bbbb
3 cccc


a ja hocu da dobijem rezultat koji izgleda ovako:

aaaa bbbb cccc
a 10 20 30
b 40 null null
c 50 null null
d null 60 null


Nadam se da sam bio jasan..;)


Pozdrav,
nele
18.05.2007. u 13:55 

schild
Dejan Šild
Subotica

Član broj: 59888
Poruke: 91
*.legendww.com.



Profil

icon Re: Firebird i crosstab upit21.05.2007. u 08:45
Nemože to u FB.


21.05.2007. u 08:45 

Fikret
Fikret Hasovic
Sarajevo

Član broj: 16828
Poruke: 24
80.65.165.*

Sajt: www.fikrethasovic.com


Profil

icon Re: Firebird i crosstab upit21.05.2007. u 10:35
Moze se izvesti, ali ce biti uzasno sporo. BTW, mislim da to samo access podrzava u obliku koji tebi treba...

Pogledaj FB 2.1 i COMMON TABLE EXPRESSIONS, to je vec druga prica ;-)

WITH
DEPT_YEAR_BUDGET AS (
SELECT FISCAL_YEAR, DEPT_NO, SUM(PROJECTED_BUDGET) AS BUDGET
FROM PROJ_DEPT_BUDGET
GROUP BY FISCAL_YEAR, DEPT_NO
)
SELECT D.DEPT_NO, D.DEPARTMENT,
B_1993.BUDGET AS B_1993, B_1994.BUDGET AS B_1994,
B_1995.BUDGET AS B_1995, B_1996.BUDGET AS B_1996
FROM DEPARTMENT D
LEFT JOIN DEPT_YEAR_BUDGET B_1993
ON D.DEPT_NO = B_1993.DEPT_NO AND B_1993.FISCAL_YEAR = 1993
LEFT JOIN DEPT_YEAR_BUDGET B_1994
ON D.DEPT_NO = B_1994.DEPT_NO AND B_1994.FISCAL_YEAR = 1994
LEFT JOIN DEPT_YEAR_BUDGET B_1995
ON D.DEPT_NO = B_1995.DEPT_NO AND B_1995.FISCAL_YEAR = 1995
LEFT JOIN DEPT_YEAR_BUDGET B_1996
ON D.DEPT_NO = B_1996.DEPT_NO AND B_1996.FISCAL_YEAR = 1996

WHERE EXISTS (SELECT * FROM PROJ_DEPT_BUDGET B WHERE D.DEPT_NO = B.DEPT_NO)

Dobices nesto ovako:




Ovo je standardna employee.fdb baza.

Fb 2.1 je trenutno u beta-fazi, i ocekuje se za par mjeseci...
Fikret Hasovic http://www.fikrethasovic.com
Senior Software Architect/Analyst

* Firebird Foundation Committee member.
- Join today at http://www.firebirdsql.org/ff/foundation
* Firebird Database Community News
http://www.fyracle.org
* JEDI VCS contributor
http://jedivcs.sourceforge.net/
21.05.2007. u 10:35 

nnele
nebojsa susic

Član broj: 145790
Poruke: 8
*.yubc.net.



Profil

icon Re: Firebird i crosstab upit24.05.2007. u 13:08
Znaci da cekam sledecu verziju firebird-a...


Hvala na odgovorima
24.05.2007. u 13:08 

Fikret
Fikret Hasovic
Sarajevo

Član broj: 16828
Poruke: 24
80.65.165.*

Sajt: www.fikrethasovic.com


Profil

icon Re: Firebird i crosstab upit25.05.2007. u 09:35
Pa vec sada mozes koristiti FB 2.1 ;-)
Dok aplikacija bude gotova, bice i release FB 2.1 ;-)
Fikret Hasovic http://www.fikrethasovic.com
Senior Software Architect/Analyst

* Firebird Foundation Committee member.
- Join today at http://www.firebirdsql.org/ff/foundation
* Firebird Database Community News
http://www.fyracle.org
* JEDI VCS contributor
http://jedivcs.sourceforge.net/
25.05.2007. u 09:35 

nnele
nebojsa susic

Član broj: 145790
Poruke: 8
*.eunet.yu.



Profil

icon Re: Firebird i crosstab upit18.06.2007. u 09:31
Sada sam konacno stigao malo detaljnije da pogledam ovaj upit i tu je mali problem sto su kolone fiksirane u upitu a ne kreiraju se dinamicki zavisno od toga sta se nalazi u bazi. Dakle moram unapred da znam koje kolone ce da se pojave i da ih u startu ubacim u upit tako da mi ova varijanta bas i ne odgovara.
Moracu da na neki drugi nacin simuliram ovakav upit.

Hvala jos jednom.


Pozdrav,
nele
18.06.2007. u 09:31 

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 78
*.eunet.yu.

Sajt: stari.homeip.net


Profil

icon Re: Firebird i crosstab upit28.06.2007. u 02:24
Posle malo eksperimentisanja, došao sam do sledećeg:

Trenutno nemam jednostavno rešenje za ovakav problem, tj. ne znam dali (i kako) ovo može da se reši jednostavnim SELECT upitom. To i dalje ne znači da ovo nije moguće rešiti jednostavnije nego što ću u nastavku izložiti.

Pošto ja koristim Delphi kao IDE, mogu ti ponuditi rešenje jedino pomoću njega. Jedno malo nestandardno rešenje do kojeg sam došao jeste da se iskoristi neka PIVOT GRID komponenta, pa tako, ja sam probao sa DevExpress ExpressPivotGrid. Ova komponenta ti omogućava da iz jednostavnog SELECT-a dobiješ vrlo složene analize, pa tako i cross-tab pogled na podatke. Sledeći tvoje specifikacije, napravio sam sledeće dve tabele:

Code:

CREATE TABLE GRUPE (
  GRUPA_ID INTEGER NOT NULL,
  NAZIV VARCHAR(20) NOT NULL,
  CONSTRAINT PK_GRUPE PRIMARY KEY (GRUPA_ID)
);

CREATE TABLE MESTA (
  MESTO_ID VARCHAR(3) NOT NULL,
  GRUPA_ID INTEGER NOT NULL,
  BROJ INTEGER NOT NULL,
  CONSTRAINT PK_MESTA PRIMARY KEY (MESTO_ID, GRUPA_ID),
  CONSTRAINT FK1_GRUPA_ID FOREIGN KEY (GRUPA_ID) REFERENCES GRUPE(GRUPA_ID) ON DELETE NO ACTION ON UPDATE CASCADE
);

Važno je da kažem da je ovde tabela GRUPE tvoja TABELA2 i tabela MESTA tvoja TABELA1 Tabele sam popunio tačno onim podacima koje si ti naveo u svom primeru.

Upit koji se koristi da bi se dobio traženi izlaz je sledeći:

Code:

SELECT M.MESTO_ID, G.NAZIV, M.BROJ
  FROM MESTA M
    INNER JOIN GRUPE G ON G.GRUPA_ID = M.GRUPA_ID

Zatim sam u PIVOT GRID-u dobijena polja rasporedio na sledeći način:

• Row fields: MESTO_ID
• Column fields: NAZIV
• Data fields: BROJ

i na kraju dobio tačno ono što tebi treba.

Predpostavljam da će komentari biti da ovo nije rešenje, pa zato ću da dodam i sledeće.

Mnoge kompleksne probleme ovog tipa rešavao sam pomoću STORED PROCEDURA jer tamo mogu da kontrolišem tok i vrstu ispisa koji vraćam. Obzirom da se ovde radi o izlazu koji je dinamičkog tipa, tj. broj kolona je promenljiv, onda kao (neprovereno) alternativno rešenje mogu da predložim da se napravi procedura koja kreira tabelu onako kako ti odgovara u svakom slučaju. Ovo bi moglo da se reši sa EXECUTE STATEMENT iskazom. Zatim se ta tabela popuni sa željenim podacima i eto rezultata.

Probaću ovih dana da napravim neko bolje rešenje, pa ako uspem, javljam.

Live long and prosper!
Prikačeni fajlovi
28.06.2007. u 02:24 

nnele
nebojsa susic

Član broj: 145790
Poruke: 8
*.static.sbb.co.yu.



Profil

icon Re: Firebird i crosstab upit09.07.2007. u 10:10
U sustini ovo je bas ono sto meni treba:)

A sada sledi jedno glupo pitanje..;)

sta je pivot grid?

To je predpostavljam neke komponenta pa mi kazite gde to moze da se download-uje. takodje predpostavljam da moze da sadrzi vise Column fields

Hvala i pozdrav,
nele
09.07.2007. u 10:10 

obucina

Član broj: 38191
Poruke: 714
213.244.209.*



Profil

icon Re: Firebird i crosstab upit16.07.2007. u 23:53
Treba da mozes da koristis DecisionCube iz Delphi-ja za ovo.
16.07.2007. u 23:53 

[es] :: Firebird/Interbase :: Firebird i crosstab upit

[ Pregleda: 1512 | Odgovora: 8 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.