Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

T-SQL Групиране на редове от колоните с МАКСИМАЛНА дължина в различни редове (?)

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 не ви позволи да създадете отделни редове (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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql сървър 2008 Неуспешно влизане за потребител „NT AUTHORITY\NETWORK SERVICE“

  2. Разберете дали ограничението CHECK е на ниво колона или на ниво таблица в SQL Server (примери за T-SQL)

  3. Разлика между sys.objects, sys.system_objects и sys.all_objects в SQL Server

  4. динамичен sql пивот в sql сървър

  5. Как да опиша таблица в SQL Server 2008?