Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

T-SQL Regroupement des lignes des colonnes de longueur MAX dans différentes lignes (?)

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

Je viens de réaliser que vous avez dit que vous avez 32 colonnes. Je ne vois pas de bon moyen de le faire, à moins qu'UNPIVOT ne vous permette de créer des lignes séparées (akey, textn) pour chaque colonne text*.

Modifier : Je n'aurai peut-être pas la chance de terminer cela aujourd'hui, mais UNPIVOT semble utile :

;
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)