Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Anfänger Frage Summenspalte nach Kenner filtern und ausgeben

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von ewc1111, 22 Oktober 2013.

  1. ewc1111

    ewc1111 Benutzer

    Hallo an die Profis hier...bin gerade dabei ein SSIS Paket zu stricken was verflucht nach Vorgaben aussehen sollen..bzw das Ergebniss was rauskommen soll. Nun hänge ich noch einer Kleinigkeit wo ich nicht weiß wie ich das lösen kann, Ich habe 2 Tabellen in denen ich mit 2 Spalten eine Summe bilde das ist ja nicht so schwer..aber jetzt kommt es..es gibt einen Kenner der entweder H oder S heisst. Soweit so gut..hier mal die Abfrage wo ich nicht weiterkomme...
    SELECT SUM(Export_Fibu_20.[Spalte10.20]) AS Betrag_Habenbuchung, SUM(Export_Fibu_10.[Spalte19.10]) AS [Gesamtbetrag Belegwährung]
    FROM Export_Fibu_10 INNER JOIN
    Export_Fibu_20 ON Export_Fibu_10.[Spalte6.10] = Export_Fibu_20.[Spalte6.20]
    Als Ergebniss soll rauskommen:
    Betrag_Habenbuchung|Gesamtbetrag_Belegwährung| Sollbuchung

    So und nun gibt es die Spalte [9.20] wo unterschieden wird ob H oder S...also muss ich einmal abfragen nach dem Kenner H und nach dem Kenner S damit mir die Sollbuchung gefüllt wird. Wäre dankbar wenn Ihr mir hier weiterhelfen könntet...
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Das tippe ich je schneller als ich Deinen text da lese ...

    Code:
    test=*> select * from ewc;
    kenner | betrag
    --------+--------
    h      |    10
    h      |      5
    s      |      3
    s      |      4
    h      |      2
    (5 rows)
    
    test=*> select sum(case when kenner = 'h' then betrag else 0 end) as habenbuchung, sum(betrag) as gesamt, sum(case when kenner = 's' then betrag else 0 end) as sollbuchung from ewc;
    habenbuchung | gesamt | sollbuchung
    --------------+--------+-------------
              17 |    24 |          7
    (1 row)
    
     
    ewc1111 gefällt das.
  3. ewc1111

    ewc1111 Benutzer

    akretschmer..Du bist ein GOTT ;-) Danke so funzt das..sorry wie gesagt bin erst seit kurzer Zeit dabei mit SQL überhaupt was zu machen. Vielen Dank...:)
     
  4. akretschmer

    akretschmer Datenbank-Guru

    na, da kannst ja auch mal 'Gefällt mir' klicken, oder?
     
    ewc1111 gefällt das.
  5. ewc1111

    ewc1111 Benutzer

    So ich habe da noch ein kleines Problem was mich echt zum verzweifeln bringt..dank akretschmer bin ich schon echt weit gekommen, aber diese Abfrage ärgert mich nun immens..es geht hier noch um die Spalte Export_Fibu_10.[Spalte1.10]) : hier liefert mir die Abfrage Anzahl 7 Stück ...obwohl in der Tabelle Fibu_10 nur 5 Datensätze vorhanden sind ..die Anzahl holt sich das Teil wohl aus der anderen Tabelle Fibu_20 ..hier sind 7 Zeilen drinnen die Positionen. was mache ich falsch ? Dank im voraus für eine erneute Hilfe der Profis hier ;-)

    SELECT SUM(CASE WHEN Export_Fibu_20.[Spalte9.20] = 'H' THEN [dbo].[Export_Fibu_20].[Spalte10.20] ELSE 0 END) AS habenbuchung,
    SUM(CASE WHEN Export_Fibu_20.[Spalte9.20] = 'S' THEN [dbo].[Export_Fibu_20].[Spalte10.20] ELSE 0 END) AS sollbuchung, SUM(Export_Fibu_10.[Spalte19.10])
    AS Gesamt, COUNT(Export_Fibu_10.[Spalte1.10]) AS Anzahl, COUNT(Export_Fibu_10.[Spalte1.10]) AS Seiten
    FROM Export_Fibu_20 INNER JOIN
    Export_Fibu_10 ON Export_Fibu_20.[Spalte6.20] = Export_Fibu_10.[Spalte6.10]
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Durch den inner join bekommst die Anzahl der Datensätze, die übereinstimmen. Beispiel, beachte in t2 ist 1 und 2 doppelt:

    Code:
    test=*> select * from t1;
     id
    ----
      1
      2
      3
      4
      5
      6
      7
    (7 rows)
    
    test=*> select * from t2;
     id
    ----
      1
      2
      3
      4
      5
      1
      2
    (7 rows)
    
    test=*> select count(*) from t1 inner join t2 using(id);
     count
    -------
      7
    (1 row)
    
    Du suchst aber scheinbar:

    Code:
    test=*> select count(distinct t2.id) from t1 inner join t2 using(id);
     count
    -------
      5
    (1 row)
    
    Wie bei mir immer: PostgreSQL. Keine Garantie, daß das bei Dir auch so geht.
     
    ewc1111 gefällt das.
  7. ewc1111

    ewc1111 Benutzer

    Grosser Meister ich verbeuge mich vor Dir ;-) letzteres hat geklappt mit Distinct...ich merke schon ich muss noch viel dazulernen..von der Logic her kann das mit inner join ja nix werden...Vielen Dank nochmal...
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden