Hallo zusammen,
ich komme leider nicht weiter und bräuchte Eure Hilfe.
Ich habe eine Tabelle mit 2 Feldern:
Auftrag Materialart
111111 rot
111111 blau
111111 grün
111112 blau
111112 rot
111113 grün
111114 rot
Wie kann ich eine Auswertung/Abfrage machen, bei der als Ergebniss nur Aufträge mit Materialart grün erscheinen?
Ich habe im ersten Schritt eine Abfrage auf die Tabelle gemacht, indem ich die Gruppierung mit Eingrenzung "grün" gemacht habe.
Im zweiten Schritt habe ich die Ergebnisse "Aufträge" aus erster Abfrage mit den Werten "Materialart" aus der Tabelle verknüpft. Somit habe ich alle Konstellationen bei den "grün" nicht mehr vorkommt ausgeschlossen.
Auftrag Materialart
111111 rot
111111 blau
111111 grün
111113 grün
Wie bekomme ich jetzt die Eingrenzung nur auf die Aufträge welche nur aus Materialart "grün" bestehen.
Hallo,
"..als Ergebniss nur Aufträge mit Materialart grün.."
einfach so:
Select * from Tabelle where Materialart ="grün"
Mein Problem ist, daß der gleiche Auftrag aus mehreren Zeilen
bestehen kann, welche den Wert rot oder/und grün enthalten kann.
Als Ergebniss muss man die Aufträge, die aus mehreren Zeilen bestehen und den Wert "grün" + "anderer Wert" haben
rausselektieren, und nur die Aufträge ausgeben, welche auch aus mehreren Zeilen bestehen können, aber nur den Wert "grün" haben.
Nur wie stelle ich es an?!
Hallo,
sorry, verstehe Dich nicht... ???
Hast Du die Abfrage mal getestet?
Was gefällt Dir konkret an diesem Ergebnis nicht?
Oder ist Dein Beispiel nicht authentisch?
Hallo DF6GL,
ich habe die Abfrage getestet, aber es kommt nicht das raus was ich brauche.
Als Beispiel hier:
Auftrag Materialart
111111 rot
111111 blau
111111 grün
111113 grün
Nach dem genannten Select erhalte ich folgende Ergebnisse:
Auftrag
111111
111113
Soweit auch verständlich, da hier Zeile/Datensatz für Datensatz abgearbeitet wird.
Allerdings muss bei meinem gewünschten Ergebniss nur
Auftrag
111113
rauskommen, da nur dieser Auftrag nur die Materialart "grün" hat (ob jetzt aus einer Zeile oder mehreren)
Der Auftrag 111111 darf nicht erscheinen, da dier auch die Materialart "rot" oder/und "blau" enthält.
Hallo,
ok, dann würde ich sagen, die Fragestellung lautet:
Zeige nur diejenigen Aufträge an, die als einzige Materialart "grün" besitzen:
Select Tabelle.Auftrag, Tabelle.Materialart from Tabelle
where (Tabelle.Materialart="grün" and (select count(Auftrag) from Tabelle as tmp where tmp.Auftrag=Tabelle.Auftrag)=1)
Hallo,
es geht doch nichts über eine exakte Zielbeschreibung ;)
Für: "Zeige nur diejenigen Aufträge an, die als einzige Materialart "grün" besitzen und diese Materialart auch nur einmal vorkommt" geht auch:
select Auftrag,
count (Auftrag) AS Anzahl, First(Materialart) AS Materialart
from Tabelle
group by Auftrag
having count(Auftrag)=1 and first(Materialart)="grün"
Gruß Oma
Hallo Oma, hallo DF6GL,
die Variante von DF6GL funktioniert, zeigt leider nur die Aufträge, die als einzige Materialart "grün" besitzen und diese Materialart auch nur einmal vorkommt.
Hier die Tabelle und das Ergebnis:
Auftrag Auftragsart
111111 rot
111111 blau
111111 grün
111112 blau
111112 rot
111113 grün
111114 rot
111115 rot
111115 grün
111116 rot
111117 grün
111117 grün
111118 grün
111118 grün
Ergebnis:
Auftrag Ausdr1
111113 grün
111114 grün
111116 grün
Ich bräuchte aber als Ergebnis
alle Aufträge, die als einzige Materialart nur "grün" besitzen
Das Ergebnis würde theoretisch so aussehen:
Auftrag Auftragsart
111111 grün
111113 grün
111115 grün
111117 grün
111117 grün
111118 grün
111118 grün
(Materialart "grün" wird immer gezählt, wenn es nur als eine einzige Materialart im Auftrag vorhanden ist)
@Oma
Bei deiner Variante erhalte ich eine Fehlermeldung.
Ich versuche die Meldung als Bild hochzuladen.
Aber ich danke Euch herzlich für eure Hlfe!!
[Anhang gelöscht durch Administrator]
Hallo,
hättest du auch gleich richtig beschreiben können bzw. das letzte Beispiel anführen können!
Wenn Abfrage nicht aktualisierbar sein muss, würde gehen:
SELECT Tabelle.Auftrag, First(Tabelle.Materialart) AS Materialart
FROM Tabelle
GROUP BY Tabelle.Auftrag
HAVING (((First(Tabelle.Materialart))="grün") AND ((Last(Tabelle.Materialart))="grün"))
Gruß Oma
Hallo,
lieber so ;):
SELECT Auftrag, Max(Tabelle.Materialart) AS Materialart
FROM Tabelle
GROUP BY Tabelle.Auftrag
HAVING (((Max(Tabelle.Materialart))="grün") AND ((Min(Tabelle.Materialart))="grün"))
Gruß Oma