запросить таблицу, чтобы результаты объединялись и возвращались в строках - PullRequest
1 голос
/ 08 ноября 2011

Мне нужно получить данные для отчета, чтобы столбчатые данные теперь были данными строк:

empID  planID  coverage
-----  ------  --------
15     1       100
15     11      200
15     12      NULL    
15     13      500
20     1       100
20     11      250
20     12      400
20     13      NULL

Становится:

emp  Basic  Supplemental  Spouse  Dependent
---  -----  ------------  ------  ---------
15   100    200                   500
20   100    250           400  

Я пробовал различные JOINS и лучший вариант сценарияполучите в 4 раза больше результатов, поскольку он повторяется для каждой строки в предыдущей таблице.

SELECT DISTINCT 
CASE benefitSelected.planID WHEN 1 THEN benefitSelected.coverageLev END AS Basic, 
CASE benefitSelected_1.planID WHEN 11 THEN benefitSelected_1.coverageLev END AS Supplemental,
CASE benefitSelected_2.planID WHEN 12 THEN benefitSelected_2.coverageLev END AS Spouse,
CASE benefitSelected_3.planID WHEN 13 THEN benefitSelected_3.coverageLev END AS Dependent
FROM benefitSelected AS benefitSelected_3
  FULL OUTER JOIN benefitSelected AS benefitSelected_2 ON benefitSelected_3.empID = benefitSelected_2.empID
  FULL OUTER JOIN benefitSelected AS benefitSelected_1 ON benefitSelected_2.empID = benefitSelected_1.empID
  FULL OUTER JOIN benefitSelected
    RIGHT OUTER JOIN employee ON benefitSelected.empID = employee.empID
  ON benefitSelected_1.empID = benefitSelected.empID 

Что я делаю не так и как мне получить желаемые результаты?

Спасибо заВаше внимание!

РЕДАКТИРОВАТЬ: Результаты запроса PIVOT ниже

--  --------  ---------  ----  --------
1   10000.00  NULL       NULL  NULL 
1   NULL      0.00       NULL  NULL
1   NULL      NULL       0.00  NULL
1   NULL      NULL       NULL  0.00
8   10000.00  NULL       NULL  NULL
8   NULL      100000.00  NULL  NULL
8   NULL      NULL       0.00  NULL
8   NULL      NULL       NULL  10000.00

Должно быть:

--  --------  ---------  ----  --------
1   10000.00  0.00       0.00  0.00
8   10000.00  100000.00  0.00  10000.00

1 Ответ

1 голос
/ 08 ноября 2011
SELECT *
FROM   (SELECT empID,
               coverage,
               CASE planID
                 WHEN 1 THEN 'Basic'
                 WHEN 11 THEN 'Supplemental'
                 WHEN 12 THEN 'Spouse'
                 WHEN 13 THEN 'Dependent'
               END PlanDesc
        FROM   benefitSelected) AS A PIVOT (Sum([coverage]) FOR [PlanDesc] IN ([Basic], [Supplemental], [Spouse], [Dependent])) p 

Запрос возвращает:

empID   Basic   Supplemental    Spouse  Dependent
15      100     200             NULL    500
20      100     250             400     NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...