sql >> Database teknologi >  >> RDS >> Sqlserver

T-SQL Gruppering af rækker fra kolonnerne med MAX længde i forskellige rækker (?)

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

Jeg indså lige du sagde du har 32 kolonner. Jeg kan ikke se en god måde at gøre det på, medmindre UNPIVOT giver dig mulighed for at oprette separate rækker (akey, textn) for hver tekst*-kolonne.

Rediger: Jeg har måske ikke en chance for at afslutte dette i dag, men UNPIVOT ser nyttigt ud:

;
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. Implementering af meget tilgængelige databaser og klynger med ClusterControl

  2. kan ikke logge ind på sql server med ny bruger oprettet

  3. hvordan downloader man blob-baseret fil fra MySQL-databasen i PHP?

  4. Sådan konverteres en streng til en numerisk værdi i PostgreSQL