sql >> Databáze >  >> RDS >> Sqlserver

T-SQL Seskupení řádků ze sloupců délky MAX v různých řádcích (?)

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

Právě jsem si uvědomil, že jste řekl, že máte 32 sloupců. Nevidím dobrý způsob, jak to udělat, pokud vám UNPIVOT neumožní vytvořit samostatné řádky (akey, textn) pro každý sloupec textu*.

Upravit: Možná nemám šanci to dnes dokončit, ale UNPIVOT vypadá užitečně:

;
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. Pokud existují dvě stejná pole, vložte jinou aktualizaci

  2. SQL Server:Selhání komunikačního spojení Požadováno SSL (nepodařilo se přijmout paket)

  3. Uncaught TypeError nemůže volat metodu 'opendatabase' nedefinovaného pluginu SQLite s cordova 3.5

  4. Spusťte funkci (nebo proceduru) PL/SQL z SQLAlchemy