Veröffentlicht 30. Mai 200817 j 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?
30. Mai 200817 j 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
30. Mai 200817 j hallo Reinhold, vielen dank für deine schnelle antwort. leider sind die ersten werte nicht gleich lang.
30. Mai 200817 j 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
30. Mai 200817 j 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
30. Mai 200817 j vielen lieben dank euch beiden, ich probiere alles einmal aus. schönes wochenende und vielen dank!
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.