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

SQL Server — uwzględnij wartość NULL za pomocą UNPIVOT

Aby zachować wartości NULL, użyj CROSS JOIN ... CASE:

select a.ID, b.column_name
, column_value = 
    case b.column_name
      when 'col1' then a.col1
      when 'col2' then a.col2
      when 'col3' then a.col3
      when 'col4' then a.col4
    end
from (
  select ID, col1, col2, col3, col4 
  from table1
  ) a
cross join (
  select 'col1' union all
  select 'col2' union all
  select 'col3' union all
  select 'col4'
  ) b (column_name)

Zamiast:

select ID, column_name, column_value
From (
  select ID, col1, col2, col3, col4
  from table1
  ) a
unpivot (
  column_value FOR column_name IN (
    col1, col2, col3, col4)
  ) b

Edytor tekstu z trybem kolumnowym ułatwia pisanie takich zapytań. UltraEdit to ma, podobnie jak Emacs. W Emacsie nazywa się to edycją prostokątną.

Może być konieczne napisanie skryptu dla 100 kolumn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. błąd podczas wstawiania do tabeli mający zamiast wyzwalacza ze struktury danych encji

  2. Algorytm sortowania identyfikatorów GUID programu SQL Server. Czemu?

  3. Procesory AMD EPYC z serii 7002 i serwer SQL

  4. Definiowanie relacji jeden-do-jednego w SQL Server

  5. Podzapytanie programu SQL Server zwróciło więcej niż 1 wartość. Nie jest to dozwolone, gdy podzapytanie następuje po =, !=, <, <=,>,>=