Кросс-таб или сводный запрос в SQL 2005 - PullRequest
2 голосов
/ 28 апреля 2011

Может кто-нибудь помочь мне с запросом кросс-таблицы / сводной в SQL 2005

Данные выглядят как

EmpId   OrgId  DayCt  Cost

1       20     15     100

2       20     36     300

3       40     25     200

4       40     10     50

Результат будет похож на:

EmpId       OrgId 20          OrgId 40  

         DayCt  Cost          DayCt  Cost


1         15     100

2         36     300

3                             25     200

4                             10     50

EmpId в первом столбце, а затем идентификаторы Org в следующем. Но для каждого OrgId я хочу, чтобы DayCt & Cost также были включены в качестве подколонок. Не уверен, что это выполнимо. Пожалуйста, помогите.

1 Ответ

1 голос
/ 28 апреля 2011

Нет такой вещи, как вложенные столбцы, это похоже на то, что должно быть сделано в вашем приложении / инструменте отчетности.

Это самое близкое к SQL, которое вы можете получить

;WITH T(EmpId,OrgId,DayCt,Cost) AS
(
select 1, 20,  15,  100 UNION ALL
select 2, 20,  36,  300 UNION ALL
select 3, 40,  25,  200 UNION ALL
select 4, 40,  10,  50
)
SELECT EmpId,
       MAX(CASE WHEN OrgId =20 THEN DayCt END) AS [OrgId 20 DayCt],
       MAX(CASE WHEN OrgId =20 THEN Cost END) AS [OrgId 20 Cost],
       MAX(CASE WHEN OrgId =40 THEN DayCt END) AS [OrgId 40 DayCt],
       MAX(CASE WHEN OrgId =40 THEN Cost END) AS [OrgId 40 Cost]
FROM T
GROUP BY EmpId

Возвращает

EmpId       OrgId 20 DayCt OrgId 20 Cost OrgId 40 DayCt OrgId 40 Cost
----------- -------------- ------------- -------------- -------------
1           15             100           NULL           NULL
2           36             300           NULL           NULL
3           NULL           NULL          25             200
4           NULL           NULL          10             50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...