Mehrere Werte in einer WHERE Abfrage

GKlein

Benutzer
Beiträge
9
Hallo zusammen, ich bin noch relativ neu in dem SQL Thema und arbeite mich so nach und nach über verschiedene Tutorials ein. Hat bisher ganz gut geklappt.
Nun habe ich doch ein Prblem, die ich nicht gelößt bekomme. Vielleicht gehe ich da falsch an die Sache ran.

Ich habe eine Preistabelle mit Namen, Stückzahl und Preis. Auf deutsch und auf Englisch.

Bsp:
Auto, 1 stk. , 500€
Auf Englisch Car, 1 Pcs. , 500€

SELECT

NAME
,STUECKZAHL
,PREIS

FROM
AUTOHAUS

WHERE NAME LIKE ‘Au%‘

Und jetzt möchte ich ‘Ca%‘ dazu packen und die Preise summiern, aber das bekomme ich nicht hin. Kann mir da jemand einen Tip geben, ob das überhaupt möglich ist?

Danke im Vorraus.

Gruß
Günther
 
Werbung:
*schüttel*

Was genau hast und machst Du da? Der Name ist mal "Auto" und mal "Auf Englisch" und Du prüfst auf "Au%"? Da kann nur 'Aua' bei rauskommen ...

Und ja: was genau willst Du nun mit diesem Datenbrei anfangen? Ich empfehle Dir Lektüre zu Normalisierung etc. in Bezug zu Datenbanken.
 
Hallo akretschmer,

ich habe wohl undeutlich geschrieben.

Ich habe eine Tabelle ( Preisattribut ) in der sind 4 Spalten :
Lauf.Nr. , Name. , Stückzahl. , Betrag

Da steht dann z.B. drin:

1 , Auto , 1 , 500€
2 , Car , 1. , 600€
3 , Vehicle , 1 , 800€
Usw.

Ich möchte mit der Abfrag die Spalte „Betrag“ summieren.
WHERE PREISATTRIBUT.NAME LIKE 'Aut%‘ , 'Car%' , 'Vehi%'

Klappt aber irgendwie nicht.

Danke,
Günther
 
Code:
test=*# select * from gklein ;
 nr |  name   | anzahl | betrag
----+---------+--------+--------
  1 | auto    |      1 |    500
  2 | car     |      1 |    600
  3 | vehicle |      1 |    800
  4 | handy   |      1 |    500
  5 | buch    |      1 |     20
(5 Zeilen)

test=*# select sum(anzahl * betrag) from gklein ;
 sum  
------
 2420
(1 Zeile)

test=*# select sum(anzahl * betrag) from gklein where name in ('auto','car','vehicle');
 sum  
------
 1900
(1 Zeile)

test=*#
 
Guten Morgen akretschmer,

ja genau das. Soweit habe ich die Abfrage auch. Ich muss aber davon ausgehen, dass ein Mitarbeiter sich mal vertippt und statt vehicle - Vehikel eintippt. Darum habe ich nur den halben Namen mit einer Wildcard eingesetzt. Aber zwei Namen mit Wildcards gehen irgendwie nicht.


test=*# select sum(anzahl * betrag) from gklein where Name like ('au%','ca%','veh%');

Danke
 
ah ja ... here we go:

Code:
test=*# select sum(anzahl * betrag) from gklein where name like any (array['aut%','car%','veh%']);
 sum  
------
 1900
(1 Zeile)

Achtung: ich verwende PostgreSQL, weiß nicht, ob das in M$SQL ebenso geht...
 
Moin moin,

LIKE IN wird so glaube nicht funktionieren. Des Weiteren wäre es auch aus Performance-Gründen denkbar schlecht.
Arbeite lieber mit OR oder noch besser stell dem User eine Auswahlliste zur Verfügung um Tippfehler zu vermeiden.

Viele Grüße und guten Morgen
 
Ich habe befürchtet das es nicht so einfach funktionieren wird.
Die array Funktion funktioniert leider nicht.

Trotzdem Danke.
Versuches es weiter, werde mich mal melden sobald es funktioniert.
 
Hallo Walter,

das funktioniert leider nicht mit OR. Hier ist die konkrete Abfrage:

SELECT

AUFTRAGPOS.AUFTRAG,
AUFTRAGPOS.USERPOS,
IC_PREISATTRIBUT.ATTRIBUT,
IC_PREISATTRIBUT.GESAMT,
AUFTRAG.DATUM


FROM
IC_PREISATTRIBUT

INNER JOIN AUFTRAGPOS
ON AUFTRAGPOS.ID = IC_PREISATTRIBUT.BELEGPOSID

INNER JOIN AUFTRAG
ON AUFTRAG.AUFTRAG = AUFTRAGPOS.AUFTRAG


WHERE AUFTRAG.DATUM BETWEEN '01.01.2018' AND '31.12.2018'
AND IC_PREISATTRIBUT.BELEGART IN ('Auftrag')
AND IC_PREISATTRIBUT.ATTRIBUT LIKE 'mech%' or IC_PREISATTRIBUT.ATTRIBUT LIKE 'mach%'

ORDER BY AUFTRAGPOS.AUFTRAG ASC,
AUFTRAGPOS.USERPOS DESC

Die Auswertung ist dann nicht mehr auf das Jahr 2018 begrenzt.
Entweder ich habe eine Auswertung mit 'mech%' von 2018 oder 'mach%' von Anfang an bis 2018.

Gruß
Günther
 
Jetzt hab ich es:

WHERE IC_PREISATTRIBUT.BELEGART IN ('Auftrag')
AND AUFTRAG.DATUM BETWEEN '01.01.2018' AND '31.12.2018'
AND IC_PREISATTRIBUT.ATTRIBUT LIKE 'mech%'
OR IC_PREISATTRIBUT.ATTRIBUT LIKE 'mach%'
AND AUFTRAG.DATUM BETWEEN '01.01.2018' AND '31.12.2018'

Nur so wird die Abfrage auf das Jahr 2018 begrenzt.

Vielen Dank noch mal an alle für die Hinweise und Hilfe.

Danke,
Günther
 
Hello again,

Syntaktisch nicht korrekt.

deine beiden LIKE´s müssten in Klammern gesetzt werden:

WHERE (bla LIKE '%A% OR blubb LIKE '%B%') AND jahr = 2018
 
Werbung:
Hallo Chucky666,

wenn ich zusätzliche Ergebnisse von ATTRIBUT und GESAMT mit anderen WHERE auswahl Kriterien in weiteren Spalten haben möchte, muss ich das mit einer OUTER APPLY Funtkion lösen ?

Danke, Günther
 
Zurück
Oben