sql >> データベース >  >> RDS >> Sqlserver

T-SQL MAXの長さの列からの行を異なる行にグループ化する(?)

    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
    

    32列あると言ったことに気づきました。 UNPIVOT で text* 列ごとに個別の行 (akey、textn) を作成できない限り、これを行う良い方法がわかりません。

    編集: 今日はこれを終わらせるチャンスはないかもしれませんが、UNPIVOT は役に立ちそうです:

    ;
    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. Oracle SQLの「@」記号の意味は何ですか?

    2. MySQLはhtmlデータまたはPHPから平文を抽出しますか?

    3. 新しい自動増分IDを挿入する方法

    4. REPLACEを使用したupdateステートメントのmysqlケース