(AufAbwegen) - MSSQL Server Statement - Syntax

Hobbystern

Hobbystern

Wahl-Debianer
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
 
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
 
Zuletzt bearbeitet:
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
 
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
 
Zuletzt bearbeitet:
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

Die 'Journal.Konto'-Spalte ist in der HAVING-Klausel ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.

Nehme ich das HAVING heraus rattert er und
Fehler aufgrund einer Division durch Null.
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!
 
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
 

Ähnliche Themen

Meine Distri spielt verrückt !

Zurück
Oben