Frage

Ich habe Probleme, herauszufinden, wie auf einem SQL-Cord zu verschmelzen oder zu schwenken, die wie folgt aussieht:

ID      VALUE       GROUP
3       John        18
4       Smith       18
5       Microsoft   18
3       Randy       21
4       Davis       21
5       IBM     21
etc

und ich möchte wie diese formatiert

NEWVALUE                GROUP
Smith, John (Microsft)      18
Davis, Randy (IBM)          21  

Dank für Ihre Anregungen und Hilfe!

War es hilfreich?

Lösung

Das ist das, was ich getan, ich hoffe, es passt für Sie

DECLARE @t table (id int, value VARCHAR(20), grupo int)
INSERT @T VALUES (3, 'John', 18)
INSERT @T VALUES (4, 'Smith', 18)
INSERT @T VALUES (5, 'Microsoft', 18)
INSERT @T VALUES (3, 'Randy', 21)
INSERT @T VALUES (4, 'Davis', 21)
INSERT @T VALUES (5, 'IBM', 21)


SELECT grupo, (SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 4) + ', ' + 
(SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 3) + ' (' +
(SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 5) + ')'
FROM @t t 
GROUP BY grupo

Andere Tipps

SELECT  LEFT(gvalue, LEN(gvalue) - 1) AS newvalue, _group
FROM    (
        SELECT  DISTINCT _group
        FROM    mytable
        ) qo
CROSS APPLY
        (
        SELECT  value + ', '
        FROM    mytable qi
        WHERE   qi._group = qo._group
        FOR XML PATH ('')
        ) gr(qvalue)

Wenn Sie immer einen Satz von drei fest codierten ID die für jede _group haben, können Sie einfach verwenden:

SELECT m3._group, m3.value + ', ' + m4.value + '(' + m5.value + ')' AS newvalue
FROM   mytable m3
LEFT JOIN
       mytable m4
ON     m4._group = m3.group
LEFT JOIN
       mytable m5
ON     m5._group = m3.group
WHERE  m3.id = 3
       AND m4.id = 4
       AND m5.id = 5

Was Sie brauchen Abfrage nicht geschwenkt wird, sondern eine einfache Auswahl mit der Gruppe durch und aggregierter String-Verkettung Funktion. Aber ich kann mich nicht erinnern die genaue Funktion in Tsql.

Update: Es gibt keine Verkettungsaggregatfunktion in Tsql aber da sql2005 können Sie Ihre eigene Erweiterung schreiben eine solche Funktion zu implementieren. Es gibt viele Beispiele für Google-Suche nach:. Tsql 2005 Verkettung Aggregat Beispiel

Dies ist ein wenig kitschig, aber ich denke, es sollte für einen kleinen Datensatz recht gut funktionieren. Wenn Sie eine Menge Daten haben müssen Sie einen Cursor und eine Schleife erstellen.

select max(case when ID = 4 then VALUE else null end) + ', ' + 
    max(case when ID = 4 then VALUE else null end) + '( ' +
    max(case when ID = 5 then VALUE else null end) + ') as NEWVALUE,
    [GROUP]
group by [GROUP]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top