Как SQL PIVOT эти данные по дням? - PullRequest
0 голосов
/ 01 июня 2019

С помощью следующей схемы и таблицы, показывающих пример выходных данных таблицы, я пытаюсь «PIVOT» эти данные иметь строки, состоящие из SERIAL и AREA, где каждый столбец является COMPLIANCE для каждой записи «NIGHTOF».Идеальный результат показан ниже.Я не могу обернуть голову вокруг синтаксиса PIVOT независимо от того, сколько раз я читаю примеры ...

Схема и таблица:

SELECT [CONTID], [AREA], [NIGHTOF], [COMPLIANCE] FROM ComplianceScores

Обычный вывод:

CONTID  NIGHTOF     AREA    COMPLIANCE
001     2014-01-01  Room 2  28
001     2014-01-01  Room 2  18
001     2014-01-01  Room 2  20
003     2014-01-02  Room 1  18
003     2014-01-02  Room 1  70
003     2014-01-02  Room 1  80
008     2014-01-03  Room 1  0
009     2014-01-04  Room 1  35

Идеальный выход:

CONTID  AREA    2014-01-01   2014-01-02    2014-01-03
001     Room 2  28           18            20
003     Room 1  18           70            80

1 Ответ

2 голосов
/ 01 июня 2019

Я согласен с @Sparky, что ваши данные и выходные данные не совпадают.

Я думаю, что ваши данные должны были выглядеть так:

create table ComplianceScores (
  CONTID char(3),
  NIGHTOF date,
  AREA varchar(10),
  COMPLIANCE int
  )

insert ComplianceScores (CONTID, NIGHTOF, AREA, COMPLIANCE)
values ('001', '2014-01-01', 'Room 2', 28)
, ('001', '2014-01-02', 'Room 2', 18)
, ('001', '2014-01-03', 'Room 2', 20)
, ('003', '2014-01-01', 'Room 1', 18)
, ('003', '2014-01-02', 'Room 1', 70)
, ('003', '2014-01-03', 'Room 1', 80)

И я думаю, что вы ищете этот SQL:

select ContId, Area, [2014-01-01], [2014-01-02], [2014-01-03]  
  from (select Area, ContId, NightOf, Compliance
          from ComplianceScores) SourceTable  
pivot
(  
  sum(Compliance)  
  for NightOf in ([2014-01-01], [2014-01-02], [2014-01-03])  
) pt;  
...