Hallo,
ich habe mein Problem eigentlich gelöst gehabt, jedoch habe ich eine Verbesserungsidee in den Kopf bekommen, jedoch nicht in SQL.
Man stelle sich vor eine Tabelle mit vielen Spalten und vielen Zeilen.
Nun kommt folgendes öffters vor:
Zwei Zeilen sind komplett identisch bis auf die letzte Spalte Y. (Also funktioniert Distinct schon mal nicht, da nicht die komplette Zeile identisch ist).
Nun will ich die zwei identische Zeilen zusammen bringen in eine (grupieren) aber dabei die Zelle der Spalte Y nehmen die mehr Zeichen in der Zelle hat :)
Es hat davor wunderbar mit
SELECT
First(Tabelle.Spalte1) AS [Spalte1],
First(Tabelle.Spalte2) AS [Spalte2],
First(Tabelle.Spalte3) AS [Spalte3],
First(Tabelle.Spalte4) AS [Spalte4]
FROM Tabelle
GROUP BY
Tabelle.Spalte1,
Tabelle.Spalte2;
Spalte 1-3 können in meinem Fall identisch sein.
Spalte4 aber nicht. In diesem Fall werden zwar die identischen Zeilen gruppiert, jedoch die Spalte4 per Zufall gruppiert, je nach dem was First in Spalte4 steht.
Ich möchte aber die Identischen Zeilen nicht per Zufall nach First gruppieren, sondern ich will die identischen Zeilen nach Länge der Zeichen in der Spalte 4 gruppieren.
Habe mir das so ungefähr vorgestellt:
Gruppiere Spalte1-3 WHERE Spalte 4 die meisten Zeichen in der Zelle hat.
Könnte man es mit:
LENGTH() bzw. CHAR_LENGTH() hinbekommen?
Wisst ihr was ich meine, oder bin zu vertieft da drin und habe es genau so kompliziert erklärt?
Falls ja könnte ich dann noch eine Beispiel tabelle aufstellen um es zu verdeutlichen.
Viele Grüße Kloso
Dumm wird es, wenn gleiche Textlängen vorliegen. :( Ansonsten lege in einer Abfrage die Feldlänge fest und stelle in einer weiteren Abfrage das Maximum der Feldlänge dar. Beide Abfragen kannst Du dann verknüpfen und es bleiben die längsten Daten aus besagtem Feld über.
Hi,
wie wäre es mit
SELECT
First(Tabelle.Spalte1) AS [Spalte1],
First(Tabelle.Spalte2) AS [Spalte2],
First(Tabelle.Spalte3) AS [Spalte3],
First(Tabelle.Spalte4) AS [Spalte4],
Len(Tabelle.Spalte4) as Laenge
FROM Tabelle
GROUP BY
Tabelle.Spalte1,
Tabelle.Spalte2
ORDER BY
Laenge DESCENDING;
Hmm, ok da klappt dann leider First. nicht mehr.
Aber die Idee an sich ist sehr gut. So hat man wenigstens dann die Spalte 4 nach größe sortieren können in dem man sagt max(Laenge).
Nun versuche ich aber jetzt das ganze ohne First hinzubekommen, aber da streikt dann Group By gleich.
Habe hier genau das selbe Problem wir bei mir entdeckt:
http://stackoverflow.com/questions/3800551/select-first-row-in-each-group-by-group (http://stackoverflow.com/questions/3800551/select-first-row-in-each-group-by-group)
Jedoch sind da so viele verschiedene Vorschläge, dass ich da keins für mich finden konnte.
Mit der Idee mit Len(...) AS SpalteLaenge hat man dann folgende Möglichkeit:
Gruppiere Spalte1 und Spalte2 - entscheide dich dabei für Zeile mit Max(SpalteLaenge).