sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server - Inkludera NULL med UNPIVOT

För att bevara NULL, använd 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)

Istället för:

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

En textredigerare med kolumnläge gör sådana frågor lättare att skriva. UltraEdit har det, så även Emacs. I Emacs kallas det rektangulär redigering.

Du kan behöva skripta det för 100 kolumner.



  1. Grunderna för att ställa in MySQL på dedikerade servrar

  2. Vad är skillnaderna mellan INSERT och UPDATE i MySQL?

  3. Hur man ökar den tillåtna storleken för bilagor när du skickar e-post i SQL Server (T-SQL)

  4. FEL 1067 (42000):Ogiltigt standardvärde för 'created_at'