sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server - Incluya NULL usando UNPIVOT

Para conservar NULL, use 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)

En lugar de:

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

Un editor de texto con modo de columna hace que estas consultas sean más fáciles de escribir. UltraEdit lo tiene, al igual que Emacs. En Emacs se llama edición rectangular.

Es posible que deba crear una secuencia de comandos para 100 columnas.