Hallo, ich stehe vor folgendem Problem:
Ich möchte eine Union Abfrage aus mehren "normalen Abfragen" machen:
Datum Name Anzahl
21.02.10 A 100
23.06.10 B 200
Eigentlich kein Problem, allerding will ich die Tabelle nachher in Excel für eine Statistik einfügen, daher muss die Abfrage immer den selben Aufbau haben. Auch wenn ein Name zu einem Datum gar nicht vorhanden ist.
Ich habe also quasi eine Standart Tabelle mit den Namen A,B,C,D,E und möchte diese nun mit Werten füllen, falls es diese gibt...
Falls es unterschiedliche Datum findet soll die Tabelle dann wiederholt werden. Wäre es sinnvoll, dann eine Tabelle mit jedem Datum von einem Jahr zu erstellen?
Jemand ne Idee?
Was sind, insbesondere auf Deine Daten da oben bezogen, "normale Abfragen"?
Dann steht in der entsprechenden Spalte halt NULL. Das ist in der Tat kein Problem.Eigentlich kein Problem, allerding will ich die Tabelle nachher in Excel für eine Statistik einfügen, daher muss die Abfrage immer den selben Aufbau haben. Auch wenn ein Name zu einem Datum gar nicht vorhanden ist.
Auch nach gefühlten 27 Versuchen, aus obigen Satz einen Sinn zu extrahieren, stehe ich noch immer erfolglos da.Ich habe also quasi eine Standart Tabelle mit den Namen A,B,C,D,E und möchte diese nun mit Werten füllen, falls es diese gibt...
ENOSENSE.Falls es unterschiedliche Datum findet soll die Tabelle dann wiederholt werden.
Mag sein. Falls dies Dein Problem ist:Wäre es sinnvoll, dann eine Tabelle mit jedem Datum von einem Jahr zu erstellen?
Code:select ('2010-01-01'::date + s *'1 day'::interval)::date as datum from generate_series(0,364) s;
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Lassen wir das mit dem Datum mal weg:
Abrage 1:
Name Anzahl
A 100
C 200
Abfrage 2:
Name Anzahl
E 100
H 200
Union Abfrage:
A 100
B 0 <- weil in keiner Abfrage gefunden = 0
C 200
D 0
E 100
F 0
G 0
H 200
AndreasCode:test=*# select * from t1; id | v ----+----- A | 100 C | 300 (2 Zeilen) Zeit: 0,275 ms test=*# select * from t2; id | v ----+----- B | 200 H | 700 (2 Zeilen) Zeit: 0,223 ms test=*# select bla.id, case when foo.id is null then bla.v else foo.v end from (select * from t1 union all select * from t2) foo right join (select chr(65+s) as id, 0 as v from generate_Series(0,10) s) bla on foo.id=bla.id order by 1; id | v ----+----- A | 100 B | 200 C | 300 D | 0 E | 0 F | 0 G | 0 H | 700 I | 0 J | 0 K | 0 (11 Zeilen) Zeit: 0,549 ms
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Danke, leider hab ich wenig Ahnung von der sql programmierung... ich arbeite eher mit einfachen MS Access Abfrage
test=*# select bla.id,
Woher nimmst du die Namen bla und foo.id?
case when foo.id is null then bla.v else foo.v
Fragst du hier auf deutsch ab ob der wert 0 (null) ist?
end from (select * from t1 union all select * from t2)
foo right join (select chr(65+s) as id,
Was ist chr(65+2)?
0 as v from generate_Series(0,10) s) bla on foo.id=bla.id order by 1;
..und generate_Series?
Sind Aliase.
Das ist zwar englisch (case, if, ...), aber ansonsten ja.case when foo.id is null then bla.v else foo.v
Fragst du hier auf deutsch ab ob der wert 0 (null) ist?
chr() ist eine Funktion.end from (select * from t1 union all select * from t2)
foo right join (select chr(65+s) as id,
Was ist chr(65+2)?
Auch eine Funktion.0 as v from generate_Series(0,10) s) bla on foo.id=bla.id order by 1;
..und generate_Series?
Vielleicht solltest Du Dir mal ein Buch besorgen. Es gibt derzeit ca. 3 Bücher in deutsch, die aktuell sind.
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Um das mal zu erklären:
Wir haben also eine Tabelle foo. Diese können wir in einer Subquery verwenden, innerhalb dieser muß diese einen eigenen Namen bekommen:Code:test=# select * from foo; a --- 1 3 5 7 (4 Zeilen)
Code:test=*# select * from (select * from foo) as bla; a --- 1 3 5 7 (4 Zeilen)PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: String Functions and Operators
Das ist zwar englisch (case, if, ...), aber ansonsten ja.
chr() ist eine Funktion.
Tabelle 9.6
Es ging um generate_series(). Sehr nützlich.Auch eine Funktion.
PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: Set Returning Functions
Man kann natürlich auch die Online-Doku lesen. Ich finde diese sehr gut strukturiert, mit Suchmöglichkeit, vielen Beispielen, Kommentaren von Lesern.Vielleicht solltest Du Dir mal ein Buch besorgen. Es gibt derzeit ca. 3 Bücher in deutsch, die aktuell sind.
Andreas
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Welche Bücher meinst du? Ich habe "SQL kurz und gut" aber da sind die Funktionen die du benutzt schonmal nicht drin. Gehen denn alle Befehle die du da verwendest auch in MS Access?
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen