(AufAbwegen) - MSSQL Server Statement - Syntax

Dieses Thema im Forum "SQL und Datenbanken" wurde erstellt von Hobbystern, 04.01.2011.

  1. #1 Hobbystern, 04.01.2011
    Hobbystern

    Hobbystern Wahl-Debianer

    Dabei seit:
    02.02.2007
    Beiträge:
    186
    Zustimmungen:
    0
    Ort:
    westl. Ruhrgebiet
    Hallo Gemeinde,

    ich bin auf Abwegen und brauche "mal eben" ein MSSQL Statement, ich habe das ganze schon so lange nicht mehr gemacht das ich auch die Maße einer netten Blondine als Statement absetzen könnte :-) Scherz beiseite - ich würde mich über eine kleine Hilfe sehr freuen und hoffe dann mit MSSQL nicht mehr so viel zu tun zu haben :devil:

    Drei Tabellen

    AuftragK AS AK (rel. Felder -> Auftragsnummer (Schlüssel), Liefertag, Kasse (Schlüssel))
    AuftragP AS AP (rel. Felder -> Auftragsnummer (Schl.), Menge, Preis)
    Journal AS JO (rel. Felder -> Datum, Kasse, Brutto)

    Ich brauche einen Umsatzanteil, also wieviel hat Produkt X am Gesamtumsatz in Zeit Y erbracht.

    Ich habe das ganze bisher so gelöst (jedoch klappt es nicht :-) ) :

    Code:
    SELECT SUM(JO.Brutto) AS Einnahme,         
    AP.Menge * AP.Preis AS Umsatz,                
    [B](Umsatz/Einnahme) AS Anteil           (das hier geht definitiv nicht)[/B]
    FROM Journal AS JO,                                   
    AuftragPositionen AS AP, 
    AuftragKöpfe AS AK 
    WHERE AP.Auftragsnummer = AK.Auftragsnummer (ab hier ist es mein Problem)
    AND AK.Liefertag > 2010-11-01                     
    AND JO.Datum > 2010-11-01
    AND AK.Kasse = JO.Kasse
    AND AK.Kasse = 12
    AND AP.Artikelnummer = 1234
    
    Es geht mir im wesentlichsten nur darum die obige FETT markierte Verrechnung zu Stande zu bringen, die "WHERE" Klauseln bekomme ich alleine hin...

    Ich wäre sehr dankbar über Eure Hilfe - 4 Augen sehen mehr als nur meine 2 kaffee-erstarrten. Vielen Dank für Eure Zeit!

    LG Stefan
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 T-Virus, 04.01.2011
    Zuletzt bearbeitet: 04.01.2011
    T-Virus

    T-Virus Free Software Fan :p

    Dabei seit:
    06.01.2009
    Beiträge:
    107
    Zustimmungen:
    0
    Ich denke folgendes könnte klappen.
    Code:
    CAST((Umsatz/Einnahme) AS FLOAT) AS Anteil
    
    Nachtrag
    Hab gerade erst gesehen wo das Problem ist...
    Du versuchst mit den Alias Namen zu rechnen, was eigentlich nicht geht.
    Du muss dafür die Berechungen kopieren.

    Folgendes sollte nun aber zum Ergebnis führen.
    Code:
    ((AP.Menge * AP.Preis)/SUM(JO.Brutto)) AS Anteil
    
     
  4. #3 Hobbystern, 04.01.2011
    Hobbystern

    Hobbystern Wahl-Debianer

    Dabei seit:
    02.02.2007
    Beiträge:
    186
    Zustimmungen:
    0
    Ort:
    westl. Ruhrgebiet
    Hey T-Virus,

    Danke für Deine Hilfe - ich hatte es schon so rausgelesen das ich Aliase erst dann nutzen kann wenn Sie berechnet wurden, was ja erst am Ende der Fall ist - es sei denn ich verschachtele die Abfrage..

    Meine Neue Abfrage läuft (wenn ich noch Preis und Menge als GROUP BY setze?!) - jedoch wirft sie mir mehr als 1 Ergebnis aus...mhmm..

    Code:
    SELECT ((SUM(AP.Menge) * SUM(AP.Preis))/SUM(JO.Brutto)) AS Anteil
    FROM Journal AS JO, 
    AuftragPositionen AS AP, 
    AuftragKöpfe AS AK 
    WHERE AP.Auftragsnummer = AK.Auftragsnummer 
    AND AK.Liefertag = 2010-11-01
    AND JO.Datum = 2010-11-01
    AND JO.Kasse = AK.Kundennummer = 1
    AND AP.Artikelnummer = 70
    AND JO.Konto = 1460
    GROUP BY AP.Menge, AP.Preis
    
    Ergebnis : 4500 Zeilen (ich brauche 1)

    Ich denke es liegt an den 3 Tabellen mit verschiedenen Schlüsseln...

    Tabelle "AP" Schlüssel : "Auftragsnummer" - Schlüssel "Datum" - Mein Kriterium "Liefertag"
    Tabelle "AK" Schlüssel : "Auftragsnummer" - Meine Kriterien "Menge" und "Preis"
    Tabelle "JO" Schlüssel : "Datum" - Meine Kriterien : "Kasse" , "Konto" , "Brutto"

    AP und AK bekomme ich mit der Auftragsnummer synchron
    AK und JO bekomme ich mit dem Datum
    AP und JO habe jedoch keine gemeinsamen Schlüsselbeziehungen

    Ich habe das ganze gerade mal ganz frei versucht :

    Code:
    SELECT ((SUM(AP.Menge) * SUM(AP.Preis))/SUM(JO.Brutto)) AS Anteil
    FROM Journal AS JO, 
    AuftragPositionen AS AP, 
    AuftragKöpfe AS AK 
    WHERE AP.Auftragsnummer = AK.Auftragsnummer   (AP zu AK)
    AND JO.Kasse = AK.Kundennummer                      (AK zu JO)
    AND AK.Liefertag = JO.Datum                              (AK zu JO - doppelt?)
    AND AP.Artikelnummer = 70
    AND JO.Konto = 1460
    GROUP BY AP.Menge, AP.Preis                             (Fehler ... keine aggregatfunktion etc. mit group by ausgeschaltet...richtig so?)
    
    (Ergebnis ebenfalls 4tsd Zeilen)

    Wie geschrieben - es ist schon etwas länger her das ich mich so tief in SQL bewegt habe...

    Danke nochmals T-Virus! Sehr nett von Dir zu helfen!

    Stefan
     
  5. #4 T-Virus, 04.01.2011
    Zuletzt bearbeitet: 04.01.2011
    T-Virus

    T-Virus Free Software Fan :p

    Dabei seit:
    06.01.2009
    Beiträge:
    107
    Zustimmungen:
    0
    Hab es mal mit Inner Join umgebaut.
    Könnte ggf. klappen oder es führt zum selben Ergebnis.
    Bitte mal testen und dann Feedback geben.

    Code:
    SELECT ((SUM(AP.Menge) * SUM(AP.Preis))/SUM(JO.Brutto)) AS Anteil
    FROM Journal JO
    INNER JOIN AuftragKöpfe AK ON JO.Kasse = AK.Kundennummer AND JO.Datum = AK.Liefertag
    INNER JOIN AuftragPositionen AP ON AP.Artikelnummer = 70 AND AP.Auftragsnummer = AK.Auftragsnummer 
    GROUP BY AP.Menge, AP.Preis
    HAVING JO.Konto = 1460
    
     
  6. #5 Hobbystern, 04.01.2011
    Hobbystern

    Hobbystern Wahl-Debianer

    Dabei seit:
    02.02.2007
    Beiträge:
    186
    Zustimmungen:
    0
    Ort:
    westl. Ruhrgebiet
    Sieht gut aus - doch genau wie bei mir .. er will jedoch immer noch nicht mit seiner Aggregationsfunktion (das war die Grundaussage zum Zusammenfassen, nicht wahr?) Warnung aufhören....:

    Code:
    HAVING JO.Konto = 1460
    

    Nehme ich das HAVING heraus rattert er und
    findet heraus das noch mehr HAVINGs da sein müssen.
    Ich muss noch das Datum, und die entsprechende Artikelnummer angeben...

    Mensch, ist das ein Affentanz....

    Ich kann es nicht deutlich genug sagen - DANKE FÜR DEINE ZEIT, ist nicht selbstverständlich!
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 T-Virus, 04.01.2011
    T-Virus

    T-Virus Free Software Fan :p

    Dabei seit:
    06.01.2009
    Beiträge:
    107
    Zustimmungen:
    0
    Hätte ich die Datenbank könnte ich natürlich mehr machen :(
    Versuchs mal mit folgendem.
    Ich habe JO.Konto in die GROUP Anweisung gepackt.
    Dann sollte es aber klappen.
    Ansonsten kannst du dich gerne per PN/ICQ melden.
    Dann sparen wir uns einen Thread für Small Talk.

    Code:
    SELECT ((SUM(AP.Menge) * SUM(AP.Preis))/SUM(JO.Brutto)) AS Anteil
    FROM Journal JO
    INNER JOIN AuftragKöpfe AK ON JO.Kasse = AK.Kundennummer AND JO.Datum = AK.Liefertag
    INNER JOIN AuftragPositionen AP ON AP.Artikelnummer = 70 AND AP.Auftragsnummer = AK.Auftragsnummer 
    GROUP BY AP.Menge, AP.Preis, JO.Konto
    HAVING JO.Konto = 1460
    
     
  9. #7 Hobbystern, 05.01.2011
    Hobbystern

    Hobbystern Wahl-Debianer

    Dabei seit:
    02.02.2007
    Beiträge:
    186
    Zustimmungen:
    0
    Ort:
    westl. Ruhrgebiet
    PM ist da :-)
     
Thema:

(AufAbwegen) - MSSQL Server Statement - Syntax

Die Seite wird geladen...

(AufAbwegen) - MSSQL Server Statement - Syntax - Ähnliche Themen

  1. OTRS aber DB auf MSSQL

    OTRS aber DB auf MSSQL: Hallo zusammen, ich stehe vor einem neuen Projekt, vielleicht der ein oder andere bereits Erfahrung damit. Ich habe hier einen Linux (Ubuntu)...
  2. Clientbibliothek für MSSQL 2005 (für PHP)

    Clientbibliothek für MSSQL 2005 (für PHP): Hallo, Bisher haben meine Recherchen soweit ergeben, dass anscheinend die FreeTDS Library und die entsprechende Erweiterung für PHP nicht mehr...