Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Union Abfrage // Vorlagentabelle mit Werten füllen

  1. #1
    shotar ist offline Neuer Benutzer
    Registriert seit
    25.02.2010
    Beiträge
    5

    Standard Union Abfrage // Vorlagentabelle mit Werten füllen

    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?

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von shotar Beitrag anzeigen
    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
    Was sind, insbesondere auf Deine Daten da oben bezogen, "normale Abfragen"?

    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.
    Dann steht in der entsprechenden Spalte halt NULL. Das ist in der Tat kein Problem.

    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...
    Auch nach gefühlten 27 Versuchen, aus obigen Satz einen Sinn zu extrahieren, stehe ich noch immer erfolglos da.

    Falls es unterschiedliche Datum findet soll die Tabelle dann wiederholt werden.
    ENOSENSE.

    Wäre es sinnvoll, dann eine Tabelle mit jedem Datum von einem Jahr zu erstellen?
    Mag sein. Falls dies Dein Problem ist:

    Code:
    select ('2010-01-01'::date + s *'1 day'::interval)::date as datum from generate_series(0,364) s;

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    shotar ist offline Neuer Benutzer
    Registriert seit
    25.02.2010
    Beiträge
    5

    Standard

    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

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von shotar Beitrag anzeigen
    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
    Code:
    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
    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    shotar ist offline Neuer Benutzer
    Registriert seit
    25.02.2010
    Beiträge
    5

    Standard

    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?

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von shotar Beitrag anzeigen
    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?
    Sind Aliase.

    case when foo.id is null then bla.v else foo.v

    Fragst du hier auf deutsch ab ob der wert 0 (null) ist?
    Das ist zwar englisch (case, if, ...), aber ansonsten ja.

    end from (select * from t1 union all select * from t2)



    foo right join (select chr(65+s) as id,

    Was ist chr(65+2)?
    chr() ist eine Funktion.

    0 as v from generate_Series(0,10) s) bla on foo.id=bla.id order by 1;

    ..und generate_Series?
    Auch eine Funktion.

    Vielleicht solltest Du Dir mal ein Buch besorgen. Es gibt derzeit ca. 3 Bücher in deutsch, die aktuell sind.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Sind Aliase.
    Um das mal zu erklären:

    Code:
    test=# select * from foo;
     a
    ---
     1
     3
     5
     7
    (4 Zeilen)
    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 (select * from foo) as bla;
     a
    ---
     1
     3
     5
     7
    (4 Zeilen)

    Das ist zwar englisch (case, if, ...), aber ansonsten ja.



    chr() ist eine Funktion.
    PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: String Functions and Operators

    Tabelle 9.6


    Auch eine Funktion.
    Es ging um generate_series(). Sehr nützlich.

    PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: Set Returning Functions

    Vielleicht solltest Du Dir mal ein Buch besorgen. Es gibt derzeit ca. 3 Bücher in deutsch, die aktuell sind.


    Andreas
    Man kann natürlich auch die Online-Doku lesen. Ich finde diese sehr gut strukturiert, mit Suchmöglichkeit, vielen Beispielen, Kommentaren von Lesern.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  8. #8
    shotar ist offline Neuer Benutzer
    Registriert seit
    25.02.2010
    Beiträge
    5

    Standard

    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?

  9. #9
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von shotar Beitrag anzeigen
    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?
    Nein. Du brauchst das Original, und das ist PostgreSQL. Um nix anderes geht es hier.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  10. #10
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von shotar Beitrag anzeigen
    Welche Bücher meinst du?
    Die von Bernd Helmle & Peter Eisentraut, Andreas Scherbaum und Thomas Pfeiffer & Andreas Wenk, um diese Frage noch zu beantworten.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum