Terminator85 Geschrieben 8. Juli 2005 Geschrieben 8. Juli 2005 Folgende Aufgabe: Eine Tabelle hat Artikel,Produktgruppen,Kriterien Ich brauch jetzt alle Artikel die in mehreren Produktgruppen sind und sich durch unterschiedliche Kriterien unterscheiden. Zitieren
geloescht_JesterDay Geschrieben 8. Juli 2005 Geschrieben 8. Juli 2005 Folgende Aufgabe: Eine Tabelle hat Artikel,Produktgruppen,Kriterien Ich brauch jetzt alle Artikel die in mehreren Produktgruppen sind und sich durch unterschiedliche Kriterien unterscheiden. SELECT * FROM (SELECT Artikel, Count(Produktgruppe) PG, Count(Kriterien) K FROM Tabelle group by Produktgruppe, Kriterien) T1 WHERE PG > 1 AND K > 1 Ist das das, was du wolltest? Zitieren
Terminator85 Geschrieben 8. Juli 2005 Autor Geschrieben 8. Juli 2005 das statement tut bei mir nicht (hab MS Sql-Server) Mein Ansatz war so: Select Artikel From Artikelkriterien Group by Artikel Having Count( distinct(Produktgruppe) )> 1 ABer wie bekomm ich noch die unterschiedlichen Kriterien je Produktgruppe ? Ich soll nämlcih nur die Ausgeben wo die Kriterien der Produktgruppen unterschiedlich sind Zitieren
~Hawkeye~ Geschrieben 8. Juli 2005 Geschrieben 8. Juli 2005 Ich habe jetzt nicht lange drüber nachgedacht aber würde da nicht ein SELECT DISTINCT reichen? Zitieren
mme Geschrieben 11. Juli 2005 Geschrieben 11. Juli 2005 Ich habe dein Datenbankmodel noch nicht begriffen... Ist wirklich alles in einer Tabelle?? Und du schreibst das du mehrere Kriterien PRO Gruppe haben willst, aber in deinem Select fragst du die Tabelle ArtikelKriterien ab was darauf schließen lässt das die Kriterien nicht auf die Gruppen sondern auf die Artikel beziehen....???? Zitieren
AxlHammer Geschrieben 11. Juli 2005 Geschrieben 11. Juli 2005 Hallo zusammen, ich bin mir noch nicht ganz sicher, was du genau haben willst, aber vielleicht erfüllt das hier ja seinen Zweck... select distinct t1.artikel from tabelle t1 , tabelle t2 where t1.artikel = t2.artikel and t1.produktgruppe <> t2.produktgruppe and t1.kriterien <> t2.kriterien Gruß, Axl Zitieren
Terminator85 Geschrieben 11. Juli 2005 Autor Geschrieben 11. Juli 2005 Danke für die Antworten. Ja, es handelt sich wirklich nur um eine Tabelle da liegt ja auch die Schwierigkeit drin. Also ich mach mal ein Beispiel: Ich habe mehrere Artikel und brauche alle Artikel die in unterschiedlichen Produktgruppen sind. Zum Beispiel: Filter Ist in der Produktgruppe: Kaffee und Öl. Und diese Produkte müssen sich jetzt noch zusätzlich durch unterschiedliche Kriterien unterscheiden. Zum Beispiel: Kaffefilter hat das Kriterium: Größe, Gewicht Ölfilter: Farbe, Durchmesser Nochmal Zusammengefasst: Ich brauche alle Artikel die es in mind. 2 Produktgruppen gibt. Und die sich noch zusätzlich durch ihre Kriterien unterscheiden. (und das ganze in einer Tabelle) @Axelhammer: Teste grad dein SQL Zitieren
mme Geschrieben 11. Juli 2005 Geschrieben 11. Juli 2005 Ich habe das nicht getestet aber du must doch nur deinen Ansatz oben nehmen und das gleiche nochmal mit den Kriterien machen. Nun hast du zwei Ergebnismengen. Wenn du nun diese Ergebnismengen miteinander verbindest hast du das ergebnis. Also ungefähr so: select AA.artikel from (Select Artikel From Artikelkriterien Group by Artikel Having Count( distinct(Produktgruppe) )> 1 ) AA , (Select Artikel From Artikelkriterien Group by Artikel Having Count( distinct(Kriterien) )> 1 ) BB where AA.artikel = BB.artikel; Ggf. anpassen auf die Syntax deines dbms... was benutzt du? Zitieren
Terminator85 Geschrieben 11. Juli 2005 Autor Geschrieben 11. Juli 2005 Hey, vielen Dank werde ich gleich mal testen -->MS SQL Server 2000 Zitieren
Terminator85 Geschrieben 11. Juli 2005 Autor Geschrieben 11. Juli 2005 Hab getestet beide SQL's liefern das selbe ergebnis: SQL 1: select AA.artikel from (Select Artikel From Artikelkriterien Group by Artikel Having Count( distinct(Produktgruppe) )> 1 ) AA , (Select Artikel From Artikelkriterien Group by Artikel Having Count( distinct(Kriterien) )> 1 ) BB SQL 2: select distinct t1.artikel from tabelle t1 , tabelle t2 where t1.artikel = t2.artikel and t1.produktgruppe <> t2.produktgruppe and t1.kriterien <> t2.kriterien wobei Sql 2 schneller ist. Jetzt muss ich mal anhand von testdaten sehen ob das so richtig ist. :mod: Bis dahin. VIELEN DANK Zitieren
mme Geschrieben 11. Juli 2005 Geschrieben 11. Juli 2005 hast du sql1 so ausgeführt wie es da steht, oder mit der where-Bedingung die ich oben noch dran hatte? Zitieren
Terminator85 Geschrieben 11. Juli 2005 Autor Geschrieben 11. Juli 2005 ich habs schon mit der where Bedingung ausgführt nur falsch gepostet :floet: SQL 1: select AA.artikel from (Select Artikel From Artikelkriterien Group by Artikel Having Count( distinct(Produktgruppe) )> 1 ) AA , (Select Artikel From Artikelkriterien Group by Artikel Having Count( distinct(Kriterien) )> 1 ) BB where t1.artnr = t2.artnr Aber ich weiß nicht ob die beiden Sql's stimmen, da es mehrere Kriterien gibt die zuvergleichen sind. Besipiel: Produktgruppe X hat 5 Kriterien (a,b,c,d,e) Produktgruppe y hat 5 Kriterien (a,b,c,d,f) So jetzt müsse quasi die kompletten Kriterien verglichen werden. Da e und f nicht übereinstimmen sollte dieser Datensatz angezeigt werden. Zitieren
Terminator85 Geschrieben 11. Juli 2005 Autor Geschrieben 11. Juli 2005 Die SQL's stimme leider immer noch nicht ganz da ein Artikel mehrere Kriterien haben kann funktioniert der Vergleich "t1.kriterien <> t2.kriterien" nicht Zitieren
mme Geschrieben 12. Juli 2005 Geschrieben 12. Juli 2005 verstehe, das hörte sich oben so an, als wenn die Artikel einfach nur mehrere Kriterien haben müssen, aber nicht unterschiedliche Kriterien im Bezug auf die anderen Artikel... Ich glaube bei diesem Problem wirst du mit sql nicht weit kommen. Und wenn doch mit einem Aufwand, bei dem du irgendein Porgramm schon lange fertig hast... Ich würde da eine Porgrammlogik reininvestieren. Und wenn nicht Ãm Frontend, dann irgenwas mit Pl/SQL bzw. bei MS heißt es glaube ich T-SQL (?) welches dann eine temporäre tabelle füllt o.ä. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.