sql >> Databasteknik >  >> RDS >> Sqlserver

T-SQL Gruppera rader från kolumnerna MAX längd i olika rader (?)

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

Jag insåg precis att du sa att du har 32 kolumner. Jag ser inget bra sätt att göra det, om inte UNPIVOT tillåter dig att skapa separata rader (akey, textn) för varje text* kolumn.

Redigera: Jag kanske inte har en chans att avsluta detta idag, men UNPIVOT ser användbart ut:

;
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. Hur man skapar en kommentar till en Oracle-databasvy

  2. Att ha grupp efter klausuler — elein's GeneralBits

  3. returnera endast de senaste valda resultaten från den lagrade proceduren

  4. SQL Server 2008 R2 HASHBYTES SHA2 returnerar null