2017-05-15 1 views
-2

Kurz zählen habe ich eine Tabelle, die 5 Spalten und Col2 hat Werte wie x1, x2, x3, ...SQL: sowie Zeilenwerte aus einer Tabelle

ich einen Ausgang möchte, die ähnlich ist nach unten:

Zeile 1 = Spalte 1 | Graf (Col 2) | Col3 | Kol4 | Col5 | (x1, x2, x3, x4, ..)

Zeile 2 = Spalte 1 | Graf (Col 2) | Col3 | Kol4 | Col5 | (x4, x8, x23, x44, ..) so weiter

Was ist der optimalste Weg, um es zu erreichen?

+1

diese Frage ist nicht klar, können Sie mehr Details liefern bitte? – jimmy8ball

+6

Ich möchte Sie dringend bitten, zu lesen, was Sie gepostet haben, und sich selbst zu fragen, ob Sie meinen, Sie könnten eine Antwort geben, die auf Ihren Angaben basiert. Dann, wenn Sie erkennen, dass die Antwort nein ist, sollten Sie hier einen Blick darauf werfen, um einige Ideen zu bekommen, wie Sie dies verbessern können. http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

+0

geben Sie Ihre Beispieldaten mit Struktur –

Antwort

0

mit für xml:

select col1, 
     col2 = count(col2), 
     col3, col4, col5, 
     col6 = replace(replace(REPLACE((select c = col2 from mytable _t where _t.col1 = t.col1 and _t.col3 = t.col3 and _t.col4 = t.col4 and _t.col5 = t.col5 
            for xml auto),'<_t c="',''),'"/>',', '),'<_t/>','') 
from mytable t 
group by col1, col3, col4, col5 

oder Erstellen einer Funktion, um die Verkettung zu tun:

CREATE FUNCTION fn_str_agg 
(
    @col1 int, @col3 int, @col4 int, @col5 int 
) 
RETURNS varchar(max) 
AS 
BEGIN 
    declare @result varchar(max)='' 

    SELECT @result = @result+',' + col2 
    FROM myTable 
    where col1 = @col1 and col3 = @col3 and col4 = @col4 and col5 = @col5 
    return @result 
END 

select col1, 
     col2 = count(col2), 
     col3, col4, col5, 
     col6 = dbo.fn_str_agg(col1, col3, col4, col5) 
from mytable t 
group by col1, col3, col4, col5 
+0

Mein derzeitiger Code ähnelt dem, was Sie vorgeschlagen haben, aber ich war mir nicht sicher, ob dies der am besten optimierte Code ist. Was nimmst du an, wenn der gleiche Code für riesige Datenmengen läuft, sagen wir 10 Millionen? –

+0

Sie können auch versuchen, eine Funktion zum Ausführen der Verkettungen zu erstellen. Beitrag bearbeitet –

Verwandte Themen