Ricky.G Geschrieben 30. Mai 2008 Geschrieben 30. Mai 2008 hallo forum, ich bräuchte hilfe bei einer abfrage. ich möchte von einer spalte einen wert gezählt zurückbekommen (anzahl) und den wert selber. folgende geschichte: spalte ist gefüllt mit so etwas: JKL8736/rhjkw64rjjn/kd938ruu7h JKL8736/ghnw64urhh/k5kgfs3837h JKL8736/0rijkkw64uj5j/kd4uurdr37h IIO8733/ihrtuuw64ujww/kd93837h IIO8733/0hhtw64ujerh/ghnw64urhh IIO8733/kd93837h/kd93i87h AIO8736/ghnw64urhh/ghnw64urhh AIO8736/0OOhtw64ujerh/kd93i87h wobei eigentlich nur der erste wert interessiert (bis zum ersten schrägstrich). ich möchte wissen wie oft der erste wert jeweils in der spalte vorkommt. als rückgabewert quasi die anzahl und der wert. ANZAHL --- WERT 3 --- JKL8736 3 --- IIO8733 2 --- AIO8736 wer kann mir helfen bei dieser sache?
Reinhold Geschrieben 30. Mai 2008 Geschrieben 30. Mai 2008 JKL8736/rhjkw64rjjn/kd938ruu7h JKL8736/ghnw64urhh/k5kgfs3837h JKL8736/0rijkkw64uj5j/kd4uurdr37h IIO8733/ihrtuuw64ujww/kd93837h IIO8733/0hhtw64ujerh/ghnw64urhh IIO8733/kd93837h/kd93i87h AIO8736/ghnw64urhh/ghnw64urhh AIO8736/0OOhtw64ujerh/kd93i87h ... ANZAHL --- WERT 3 --- JKL8736 3 --- IIO8733 2 --- AIO8736 Ich unterstelle mal, dass der Wert immer gleich lang ist wie in deinem Beispiel. Dann versuch es mal so: (ungetestet) select left(spaltenname, 7) as WERT, count(*) as ANZAHL from tabellenname group by left(spaltenname, 7) order by count(*) desc, left(spaltenname, 7) desc hth Reinhold
Ricky.G Geschrieben 30. Mai 2008 Autor Geschrieben 30. Mai 2008 hallo Reinhold, vielen dank für deine schnelle antwort. leider sind die ersten werte nicht gleich lang.
Jan Jansen Geschrieben 30. Mai 2008 Geschrieben 30. Mai 2008 Dann arbeite mit Stringfunktionen: Such nach einer Funktion die das nte Vorkommen eines Zeichens/Strings in einem String sucht (geh einfach mal die Liste der Stringfunktionen durch) Bestimme die erste Position eines '/' schneide mit substr(1,<Position>-1) den gewünschten Teil aus der Rest ist eine normale Aggregation
Reinhold Geschrieben 30. Mai 2008 Geschrieben 30. Mai 2008 Dann so: select left(spaltenname , case when (CHARINDEX ('/', spaltenname ) -1 ) > 0 then (CHARINDEX ('/', spaltenname ) -1 ) else 0 end )) as WERT, count(*) as ANZAHL from tabellenname group by left(spaltenname , case when (CHARINDEX ('/', spaltenname ) -1 ) > 0 then (CHARINDEX ('/', spaltenname ) -1 ) else 0 end )) order by count(*) desc, left(spaltenname , case when (CHARINDEX ('/', spaltenname ) -1 ) > 0 then (CHARINDEX ('/', spaltenname ) -1 ) else 0 end )) desc Auch das wie immer ungetestet und mit heisser Nadel. Falls die Tabelle viele Zeilen hat, solltest du das aber besser über Nacht laufen lassen. Reinhold
Ricky.G Geschrieben 30. Mai 2008 Autor Geschrieben 30. Mai 2008 vielen lieben dank euch beiden, ich probiere alles einmal aus. schönes wochenende und vielen dank!
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden