Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server - Включете NULL, като използвате UNPIVOT

За да запазите NULL, използвайте CROSS JOIN ... СЛУЧАЙ:

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)

Вместо:

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

Текстов редактор с режим на колони прави подобни заявки по-лесни за писане. UltraEdit го има, както и Emacs. В Emacs се нарича правоъгълно редактиране.

Може да се наложи да го скриптирате за 100 колони.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL актуализация от една таблица в друга въз основа на съвпадение на идентификатор

  2. Как да видите плана за изпълнение на заявка в Azure Data Studio (SQL Server)

  3. Sql заявка за дървовидна таблица

  4. SQL изберете max(дата) и съответната стойност

  5. Как да получите дата във формат ГГГГ-ММ-ДД от TSQL поле за дата и час?