T- SQL группирует значения по нескольким столбцам и возвращает значения строк в виде столбцов - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть набор данных, который возвращает номер строки, 2 столбца RoomType и FaultTypeName должны быть сгруппированы, но эти 2 столбца также имеют 1 столбец «Результат». Из-за столбца «Результат» группировка не удастся. Итак, чтобы было понятнее, результирующий набор выглядит следующим образом:

enter image description here

FaultTypeName - это всегда одни и те же три значения «Methode (M)», « Периодик (P) 'или Вуил (V). Эти значения должны быть возвращены как новые столбцы с соответственно их значениями результата. Таким образом, приведенный выше набор результатов должен быть возвращен следующим образом:

enter image description here

Я уже пытался что-то сделать с номером строки (отсюда и столбец rn), но этого не произошло вполне сработало:

select 
       ...
from(
  select MeasurementId, RoomType, FaultTypeName, Result,
    row_number() over(partition by RoomType order by RoomType, FaultTypeName) rn
  from vwReportData
  where measurementid = 1382596
)sub

Существует вероятность, что только 2 (или меньше) из 3 столбцов (Methode, Periodiek и Vuil) будут возвращены вместо всех 3 (так меньше строк), если это В этом случае недостающие имена FaultTypeName должны быть добавлены в виде столбца, но с результатом 0.

Есть идеи, как получить правильный вывод?

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

В конце концов я понял это сам:

SELECT 
    MeasurementId, 
    RoomType, 
    M = ISNULL(MIN(CASE WHEN FaultTypeName = 'Methode (M)' THEN Result ELSE NULL END), 0),
    P = ISNULL(MIN(CASE WHEN FaultTypeName = 'Periodiek (P)' THEN Result ELSE NULL END), 0),
    V = ISNULL(MIN(CASE WHEN FaultTypeName = 'Vuil (V)' THEN Result ELSE NULL END), 0)
FROM vwReportData
WHERE MeasurementId = 1382596
GROUP BY MeasurementId, RoomType
0 голосов
/ 29 апреля 2020

Попробуйте это:

select *
from
(
  select MeasurementId, RoomType, FaultTypeName, Result,
    row_number() over(partition by RoomType order by RoomType, FaultTypeName) rn
  from vwReportData
  where measurementid = 1382596
) DS
PIVOT
(
    MAX(result) for rn in ([1], [2], [3])
) PVT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...