sql >> Databáze >  >> RDS >> Sqlserver

SQL Server – zahrňte NULL pomocí UNPIVOT

Chcete-li zachovat hodnoty NULL, použijte 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)

Místo:

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

Textový editor se sloupcovým režimem usnadňuje psaní takových dotazů. UltraEdit to má, Emacs také. V Emacsu se tomu říká obdélníková úprava.

Možná budete muset skriptovat pro 100 sloupců.



  1. Prozkoumání možností čekání na zámek s nízkou prioritou v SQL Server 2014 CTP1

  2. Jak zobrazit závislosti objektů v Accessu 2016

  3. Poddotazy TypeORM

  4. Spojte dva sloupce a přidejte je do jednoho nového sloupce