Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

T-SQL Nhóm các hàng từ các cột có độ dài MAX thành các hàng khác nhau (?)

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

Tôi vừa nhận ra bạn nói rằng bạn có 32 cột. Tôi không thấy cách hay để làm điều đó, trừ khi UNPIVOT cho phép bạn tạo các hàng riêng biệt (akey, textn) cho mỗi cột văn bản *.

Chỉnh sửa: Tôi có thể không có cơ hội hoàn thành việc này hôm nay, nhưng UNPIVOT có vẻ hữu ích:

;
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. Chọn các cột từ tập hợp kết quả của quy trình được lưu trữ

  2. Tách các từ theo nhóm khôn ngoan cho mỗi hàng trong SQL

  3. Tôi có thể có khóa ngoại tham chiếu đến một cột trong dạng xem trong SQL Server không?

  4. Nhiều tuyên bố cập nhật trong SQL Server MERGE

  5. Tự động tạo bảng tạm thời dựa trên tập kết quả từ SP