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

Firebird i crosstab upit

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

[ Pregleda: 3920 | Odgovora: 8 ] > FB > Twit

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 - pre 206 meseci
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
 
Odgovor na temu

schild
Dejan Šild
TopCode Software
Subotica

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

Sajt: www.topcode.rs


+2 Profil

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


 
Odgovor na temu

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 - pre 205 meseci
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/
 
Odgovor na temu

nnele
nebojsa susic

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



Profil

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


Hvala na odgovorima
 
Odgovor na temu

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 - pre 205 meseci
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/
 
Odgovor na temu

nnele
nebojsa susic

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



Profil

icon Re: Firebird i crosstab upit18.06.2007. u 09:31 - pre 205 meseci
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
 
Odgovor na temu

rambo
Dejan Petković
Beograd

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



+6 Profil

icon Re: Firebird i crosstab upit28.06.2007. u 02:24 - pre 204 meseci
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.

"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
Prikačeni fajlovi
 
Odgovor na temu

nnele
nebojsa susic

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



Profil

icon Re: Firebird i crosstab upit09.07.2007. u 10:10 - pre 204 meseci
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
 
Odgovor na temu

obucina

Član broj: 38191
Poruke: 723

Jabber: obucina


+7 Profil

icon Re: Firebird i crosstab upit16.07.2007. u 23:53 - pre 204 meseci
Treba da mozes da koristis DecisionCube iz Delphi-ja za ovo.
 
Odgovor na temu

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

[ Pregleda: 3920 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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