Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

T-SQL Mengelompokkan baris dari kolom MAX panjang di baris yang berbeda (?)

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

Saya baru menyadari bahwa Anda mengatakan bahwa Anda memiliki 32 kolom. Saya tidak melihat cara yang baik untuk melakukannya, kecuali UNPIVOT mengizinkan Anda membuat baris terpisah (akey, textn) untuk setiap kolom teks*.

Sunting: Saya mungkin tidak memiliki kesempatan untuk menyelesaikan ini hari ini, tetapi UNPIVOT tampaknya berguna:

;
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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah saya membuat fungsi global di SQL Server?

  2. Pelajari Tentang Cara Menggunakan SQL Server Management Studio

  3. Sementara loop di SQL Server 2008 iterasi melalui rentang tanggal dan kemudian INSERT

  4. SQL Server:Cara menemukan semua nama instance localdb

  5. Salin tabel ke database yang berbeda pada SQL Server yang berbeda