Развернуть строки в столбцы - PullRequest
0 голосов
/ 31 октября 2019

Formatted Table Image- Click here

Я хочу отключить таблицу на основе номера дела: (см. Изображение для отформатированной таблицы)

Однако этобольшой набор данных, поэтому я не могу поместить значение каждой даты в функцию unpivot. Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Я рекомендую использовать cross apply для этого:

select c.case_number, v.[date], v.status
from cases c cross apply
     (values (open, 'open'), (approved, 'approved')
     ) v([date], status)
order by c.case_number, v.[date];

Технически, apply реализует "боковое соединение". Это очень мощный механизм, и откручивание - хорошее введение в то, что они делают.

В отличие от этого, unpivot - это специальный синтаксис, доступный только в нескольких базах данных. Он делает только одну вещь - и эту одну вещь можно так же легко сделать другим способом.

0 голосов
/ 31 октября 2019

SQL Fiddle

Настройка схемы MS SQL Server 2017 :

create table Cases (CaseNumber int, OpenD date , Approved date )
insert into Cases(CaseNumber,OpenD,Approved)values(3527,'2/11/18','5/11/18')
insert into Cases(CaseNumber,OpenD,Approved)values(7756,'3/12/18','10/12/18')
insert into Cases(CaseNumber,OpenD,Approved)values(6192,'1/1/19',NULL)

Запрос 1 :

Select CaseNumber,Date,Status
FROM Cases c
unpivot (
  Date for Status in (OpenD,Approved)
  ) as UnPVt

Результаты :

| CaseNumber |       Date |   Status |
|------------|------------|----------|
|       3527 | 2018-02-11 |    OpenD |
|       3527 | 2018-05-11 | Approved |
|       7756 | 2018-03-12 |    OpenD |
|       7756 | 2018-10-12 | Approved |
|       6192 | 2019-01-01 |    OpenD |
...