2010-12-12 13 views
2

lassen Sie uns sagen, dass ich eine Tabelle mit Spalten wie dieses:TSQL Wie wird eine Zeichenfolge dynamisch erstellt?

| Name | Cat_id | 

ich die Funktion nicht mehr erinnern kann, die eine varchar wie diese

1,24|4,56|5,67 

wo die Zahl vor dem Komma die Cat_id ist aufbauen können, und die Zahl nach dem Komma ist die Anzahl der Zeilen mit dieser ID. Irgendwelche Ideen ?

+1

es die SQL Server – Tony

+1

Doppelte ist von : http://stackoverflow.com/questions/941103/concat-groups-in-sql-server – thomaspaulb

+0

Sind die Pipe-Symbol Teil der Ausgabe? Ist die Ausgabe nur eine Zeile mit röhrenbegrenzten Werten von cat_id, count (cat_id) oder Sie erwarten eine Zeile pro cat_id? –

Antwort

3

Dies könnte den Trick:

declare @s varchar(8000) 
set  @s = '' 

select @s = @s + cast(cat_id as varchar(20)) + ',' + cast(count(*) as varchar(20)) + '|' 
from SomeTable 
group by cat_id 
option(maxdop 1) -- this sure there are no funny side-effects because of parallelism 

print @s 

Alternativ können Sie 'für xml', oder einen Cursor verwenden, aber dies sollte schneller sein.

Grüße GJ

+0

hm, der count (*) gibt immer 1 zurück, auch wenn ich eine Unterabfrage erstelle (Anzahl (*) von SomeTable where cat_id = st.cat_id) statt dieser Zahl (*) – Tony

+0

Sollte funktionieren ... sicher nicht hae einzigartige ID's? (nicht unwahrscheinlich ...) – gjvdkamp

+0

Mist, sorry, lies es falsch. Machen Sie es @S = @s + name + ',' .. etc .. Gruppe nach Namen. Wir gruppieren Cat_id anstelle des Namens. EDIT: Nein, du hast nach einer Gruppe von cat_id gefragt. Bist du dir da sicher? – gjvdkamp

0

Hope this helfen (SQL Server 2005 +) ... Ich habe das Programm nicht getestet, wie ich SQL Server donot haben derzeit

With Cte1 As(
Select Cat_ID, Count(Cat_ID),Cast(Cat_ID as Varchar) + Cast(Count(Cat_ID)) as MergedColumn from tbl 
group by Cat_ID), 
cte2 as(
Select 
    Cat_ID 
    , mergedData = stuff((Select cast(MergedColumn + '|' as varchar) from tbl t2 where t2.Cat_ID = t1.Cat_ID 
        for xml path('')),1,1,'') 
from tbl t1) 

select mergedData from Cte2 
Verwandte Themen