Hallo,
ich bin neu hier und auch erst seit kurzem in der Branche, deswegen hab ich leider noch nicht die Routine wie viele von euch hier
Für viele ist dieses SELECT wahrscheinlich einfach, aber ich bin am verzweifeln:
So sieht ein Teil meiner table aus:
Mal zur Erläuterung:
In [Land] stehen ISO3 Ländercodes, jeder Artikel muss einen Preis in jedem Land haben. Die Farbe ist default 0 außer er hat einen reduzierten Preis, dieser gilt nur für einen bestimmten Artikel in einem bestimmten Land.
Der Primary Key ist somit Land, Artikel, Farbe
Ich hätte nun gern ein SELECT, dass mir nur Artikel ausgibt, welche auch einen Preis in jedem Land haben. Dann gibts noch die reduzierten Preise, die auch nur ausgegeben werden dürfen, wenn der "Hauptartikel" (mit Farbe 0) in jedem Land vorkommt.
Ich habe mir gedacht, das ich statisch für jedes Land 2 Spalten anlege:
So weit bin ich nun, nur leider hab ich die reduzierten Preise noch nicht konform da drin (keine Abfrage auf Hauptartikel) ... habs zwar mit einem
probiert, nur leider ist das soooo unperformat, das ich einen Timeout bekomme (ist ja auch verständlich ^^). Mir ist btw auch egal, wenn keine extra Spalten angelegt werden (was wl auch performanter und "besser" wäre, nur scheitert hier meine Logik).
TL;DR: Wichtig ist nur, dass Artikel in jedem Land einen Preis haben und eine Preisreduktion nur ausgegeben wird, wenn die Artikelnr mit Farbe 0 in jedem Land vorkommt.
Könnte mir jemand da weiter helfen?
Ich bräuchte eine performante Lösung, da es sich hier um ~400.000 DS handelt.
Vielen Dank im vorraus!
LG Shoox
PS: Es gibt nur 3 mögliche Länder: AUT, CHE und DEU.
PPS: mySQL-DB im Hintergrund, aber ich glaube, dass das in diesem Fall irrelevant ist.
ich bin neu hier und auch erst seit kurzem in der Branche, deswegen hab ich leider noch nicht die Routine wie viele von euch hier
Für viele ist dieses SELECT wahrscheinlich einfach, aber ich bin am verzweifeln:
So sieht ein Teil meiner table aus:
Code:
Land | Artikel | Farbe | Preis | PreisRed | AUT | 4711 | 0 | 7999 | 0 | AUT | 4711 | 1 | 0 | 2499 | DEU | 4711 | 0 | 7900 | 0 | ... usw
In [Land] stehen ISO3 Ländercodes, jeder Artikel muss einen Preis in jedem Land haben. Die Farbe ist default 0 außer er hat einen reduzierten Preis, dieser gilt nur für einen bestimmten Artikel in einem bestimmten Land.
Der Primary Key ist somit Land, Artikel, Farbe
Ich hätte nun gern ein SELECT, dass mir nur Artikel ausgibt, welche auch einen Preis in jedem Land haben. Dann gibts noch die reduzierten Preise, die auch nur ausgegeben werden dürfen, wenn der "Hauptartikel" (mit Farbe 0) in jedem Land vorkommt.
Ich habe mir gedacht, das ich statisch für jedes Land 2 Spalten anlege:
Code:
select artikelnr, farbe, sum((case when (land = 'AUT' and farbe = 0) then preis end)) AS AUTPREIS, sum((case when (land = 'AUT' and farbe <> 0) then preisreduziert end)) AS AUTREDPREIS, sum((case when (land = 'DEU' and farbe = 0) then preis end)) AS DEUPREIS, sum((case when (land = 'DEU' and farbe <> 0) then preisreduziert end)) AS DEUREDPREIS, sum((case when (land = 'CHE' and farbe = 0) then preis end)) AS CHEPREIS, sum((case when (land = 'CHE' and farbe <> 0) then preisreduziert end)) AS CHEREDPREIS from preise group by artikelnr, farbe having AUTPREIS is not null and DEUPREIS is not null and CHEPREIS is not null;
Code:
farbe <> 0 and artikelnr in (SELECT ...)
TL;DR: Wichtig ist nur, dass Artikel in jedem Land einen Preis haben und eine Preisreduktion nur ausgegeben wird, wenn die Artikelnr mit Farbe 0 in jedem Land vorkommt.
Könnte mir jemand da weiter helfen?
Ich bräuchte eine performante Lösung, da es sich hier um ~400.000 DS handelt.
Vielen Dank im vorraus!
LG Shoox
PS: Es gibt nur 3 mögliche Länder: AUT, CHE und DEU.
PPS: mySQL-DB im Hintergrund, aber ich glaube, dass das in diesem Fall irrelevant ist.
Comment