sql >> Database >  >> RDS >> Sqlserver

T-SQL Groepering van rijen uit de MAX lengte kolommen in verschillende rijen (?)

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

Ik realiseer me net dat je zei dat je 32 kolommen hebt. Ik zie geen goede manier om dat te doen, tenzij UNPIVOT u toestaat aparte rijen (akey, textn) te maken voor elke tekst*-kolom.

Bewerken: Ik heb vandaag misschien niet de kans om dit af te maken, maar UNPIVOT ziet er nuttig uit:

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


  1. MySQL dynamische-pivot

  2. PHP MySQL - Voor elke 6 rijen een div invoegen?

  3. tel zaterdagen vóór 15 data als werkdagen en sla andere over

  4. Geaggregeerde gegevenstabellen