Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

T-SQL Grupowanie wierszy z kolumn o maksymalnej długości w różnych wierszach (?)

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

Właśnie zdałem sobie sprawę, że powiedziałeś, że masz 32 kolumny. Nie widzę dobrego sposobu na zrobienie tego, chyba że UNPIVOT pozwoli ci utworzyć oddzielne wiersze (takie, tekstn) dla każdej kolumny text*.

Edytuj: Może nie mam szansy na dokończenie tego dzisiaj, ale UNPIVOT wygląda na przydatne:

;
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. Czy istnieje sposób na uzyskanie listy wszystkich aktualnych tabel tymczasowych w SQL Server?

  2. Jak uzyskać adres IP klienta z samego SQL Server 2008?

  3. com.microsoft.sqlserver.jdbc.SQLServerException:połączenie TCP/IP z hostem lokalnym, port 1433 nie powiodło się

  4. SQL wypełnia łączną liczbę dni roboczych w miesiącu pomniejszoną o dni wolne od pracy w bieżącym roku finansowym

  5. Jak utworzyć listę rozdzielaną przecinkami za pomocą zapytania SQL?