Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

T-SQL Gruppieren von Zeilen aus den MAX-Längenspalten in verschiedenen Zeilen (?)

SELECT A.akey, 
    (
        SELECT TOP 1 T1.text1
        FROM test1 T1
        WHERE T1.akey=A.akey AND LEN(T1.TEXT1) = MAX(LEN(A.text1))
    ) AS TEXT1,
    (
        SELECT TOP 1 T2.text2
        FROM test1 T2
        WHERE T2.akey=A.akey AND LEN(T2.TEXT2) = MAX(LEN(A.text2))
    ) AS TEXT2,
    (
        SELECT TOP 1 T3.text3
        FROM test1 T3
        WHERE T3.akey=A.akey AND LEN(T3.TEXT3) = MAX(LEN(A.text3))
    ) AS TEXT3
FROM TEST1 AS A
GROUP BY A.akey

Mir ist gerade aufgefallen, dass Sie sagten, Sie hätten 32 Spalten. Ich sehe keinen guten Weg, dies zu tun, es sei denn, UNPIVOT würde Ihnen erlauben, separate Zeilen (akey, textn) für jede text*-Spalte zu erstellen.

Bearbeiten: Ich habe heute vielleicht keine Gelegenheit, dies zu beenden, aber UNPIVOT sieht nützlich aus:

;
WITH COLUMNS AS
(
    SELECT akey, [Column], ColumnValue
    FROM
        (
            SELECT X.Akey, X.Text1, X.Text2, X.Text3
            FROM test1 X
        ) AS p
    UNPIVOT (ColumnValue FOR [Column] IN (Text1, Text2, Text3))
    AS UNPVT
)
SELECT *
FROM COLUMNS
ORDER BY akey,[Column], LEN(ColumnValue)