SQL Spalte unterschiedlich zuweisen

SpeedyWeb

Grünschnabel
Hallo zusammen,
ich habe ein Problem

Ich habe folgenden Abfrage gebaut
Code:
SELECT a1.Projektnr, a1.Posdruck, a1.Losdruck, a1.Titeldruck, a1.Artikelnr,
a1.Artikelbez1, a1.Anzahl, a1.Maekliste, a1.Maekproj, a1.Posintern,
a1.Kasintern, b1.Angebotnr, b1.Firma1, c1.Bestellnr
FROM ANGEBOT AS b1
INNER JOIN Proj_POS AS a1
ON (a1.Projektnr=b1.Projektnr a1.Kasintern<>a1.Posintern )
LEFT JOIN ARTMLIE AS c1
ON (a1.Artikelnr=c1.Artikelnr)
WHERE b1.ANGEBOTNR=:Angebotsnummer
AND a1.Kasintern<>0
ORDER BY a1.Posintern
Mein Problem ist das ich die Anzahl nochmal haben muss (z.B. als Menge) wenn a1.Kasintern=a1.Posintern ist, um diesen dann mit der Anzahl (also Menge*Anzahl) zu multiplizieren.
Hintergrund ist das das eine ein Hauptfeld (a1.Kasintern=a1.Posintern) mit der tatsächlichen Menge ist und das andere ein Unterfeld mit einzelmengen (a1.Kasintern<>a1.Posintern).

Von der Logik würde ich zwie Bedingungen einbauen nämlich
wenn a1.Kasintern=a1.Posintern dann Anzahl as Menge und
wenn a1.Kasintern<>a1.Posintern dann Anzahl as U_Menge.
Bekomme das aber nicht hin und bin langsam echt am verzweifeln,
bin also für jeden erdenklichen ansatz zu haben und danke euch jetzt schonmal für eure mithilfe
Zum besseren Verständnis
Also aus der Tabelle Angebot bekomme ich die Projektnummer,mit dieser hole ich mir die Positionen aus der Proj_Pos, zusätzlich benötige ich aber auch noch die Herstellerartikelnummern, diese wiederum stehen in der Artikeldatenbank.

Die Teilmenge ist immer eine Menge der Unterposition, diese muss, damit die richtige Menge ermittelt wird, mit der Menge aus der Hauptposition multipliziert werden.
Erkennen was eine Hauptposition ist kann ich daran das die gleiche Zahl inder Kasintern und in der Posintern steht.

Hoffe ich konnte mich verständlich ausdrücken

Gruss Speedy@Web
 
Hallo und erst mal willkommen bei tutorials.de.

Ich sehe hier 2 mögliche Lösungsansätze:
  1. Verwendung von CASE Ausdrücken im SELECT
  2. Verarbeitung der Daten in der Applikation

Ersteres wäre sicherlich die elegantere Variante. Da ich allerdings fast ausschliesslich mit MS SQL und PostgreSQL arbeite, weis ich nicht, in welcher Weise andere DBMS diese unterstützen.

Gruß

M.
 
Danke erstmal für die Antwort.

Ich habe folgenden Case eingebaut

CASE a1.Posintern
WHEN a1.Kasintern
THEN a1.Anzahl
END AS Menge

Funktioniert soweit, allerdings habe ich nun das nächste Problem, nämlich das die Menge die dabei herauskommt nur in den Zeilen steht wo diese Bedingung zutrifft, also a1.Kasintern=a1.Posintern. Jetzt müsste die Menge aus dieser Bedingung auch dort eigetragen werden wo bei a1.Kasintern die gleiche Nummer also a1.Kasintern=a1.Kasintern vorhanden ist?
Hoffe ich konnte mich verständlich ausdrücken
 
Zuletzt bearbeitet:
Also Tabelle ist in Auszügen wie folgt mit meiner Abfrage
Code:
Kasintern Posintern Menge Anzahl Bezeichnung u.s.w.
     11       11      3          Handy inkl. Tasche
     11       22             1   Nokia E60
     11       33             1   Tasche
     34       34      5          Taschenlampe inkl. Batterien
     34       45             3   Batterien
     34       56             1   Maglite

wenn also Kasintern = Posintern dann Anzahl als Menge (Hauptposition)
wenn Kasintern <> Posintern (Kasintern gemeinsam) dann Unterposition zur Hauptposition.
Nun muss ich die Menge der Unterposition mit der Menge der Hauptposition multiplizieren um auf die richtigeStückzahl zu kommen.
Am einfachsten wäre es wenn ich jetzt noch die Spalte Menge mit der ermittelten Menge der Hauptposition füllen könnte und zwar dort wo bei Kasintern dieselbe Nummer auftaucht
und die Menge noch kein Wert hat. Hoffe es ist jetzt verständlicher was ich meine.

P.S.
An der Datenbank kann ich so leider nichts ändern, die Daten werden leider in der Datenbank so abgelegt.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück