Считает, что у меня есть таблица, которая содержит данные в следующем виде:Multi-Column, многорядный PIVOT
Foo_FK MonthCode_FK Activity_FK SumResultsX SumResultsY
-----------------------------------------------------------
1 201312 0 10 2
1 201312 1 5 1
1 201401 0 15 3
1 201401 1 7 2
2 201312 0 9 3
2 201312 1 1 2
2 201401 0 6 2
2 201401 1 17 4
Для моих целей, то можно предположить, что эта таблица представляет собой совокупность, которая будет иметь был создан GROUP BY
по адресу Foo_FK, MonthCode_FK, Activity_FK
с SUM(ResultsA), SUM(ResultsB)
для получения данных, что делает Foo_FK, MonthCode_FK, Activity_FK
уникальным для каждой записи.
Если по какой-то причине я счел предпочтительным PIVOT
эту таблицу в хранимой процедуре, чтобы облегчить процесс завинчивания с помощью SSRS, который я должен был бы сделать (и, несомненно, позже поддерживать), желая получить следующий формат для потребления через матрицу tablix thingy:
Foo_FK 1312_0_X 1312_0_Y 1312_1_X 1312_1_Y 1401_0_X 1401_0_Y 1401_1_X 1401_1_Y
--------------------------------------------------------------------------------------
1 10 2 5 1 15 3 7 2
2 9 3 1 2 6 2 17 4
Как бы я делал это не мысленно? Пожалуйста, обратитесь к этому SQL Fiddle в доказательство, что я, вероятно, пытаюсь использовать молоток, чтобы построить устройство, которое толкает в гвоздях. Не беспокойтесь о динамической версии, так как я уверен, что смогу понять это, как только я руководствуюсь статическим решением для этого теста.
Прямо сейчас, я пытался создать Foo_FK, MonthCode_FK
установить с помощью следующих, которые я тогда попытка PIVOT
(see the Fiddle for the full mess):
SELECT Foo_FK = ISNULL(a0.Foo_FK, a1.Foo_FK),
MonthCode_FK = ISNULL(a0.MonthCode_FK, a1.MonthCode_FK),
[0_X] = ISNULL(a0.SumResultX, 0),
[0_Y] = ISNULL(a0.SumResultY, 0),
[1_X] = ISNULL(a1.SumResultX, 0),
[1_Y] = ISNULL(a1.SumResultY, 0)
FROM ( SELECT Foo_FK, MonthCode_FK, Activity_FK,
SumResultX, SumResultY
FROM dbo.t_FooActivityByMonth
WHERE Activity_FK = 0) a0
FULL OUTER JOIN (
SELECT Foo_FK, MonthCode_FK, Activity_FK,
SumResultX, SumResultY
FROM dbo.t_FooActivityByMonth
WHERE Activity_FK = 1) a1
ON a0.Foo_FK = a1.Foo_FK;
я пришел через некоторое excellent advice on this SO question, так что я в процесс выполнения какой-либо формы UNPIVOT
, прежде чем я верну все, используя PIVOT
и MAX
, но если есть лучший способ сделать это, я все уши.