Как создать сводную таблицу на сервере SQL - PullRequest
0 голосов
/ 27 апреля 2020

В настоящее время мой оператор T- SQL,

SELECT 
    ep.AgentOwnerName, ep.AgencyName, ep.LocationName, ep.AgentNo, 
    ep.TY, ROUND(ROUND(CAST(ep.EP as money), -1), 0) as EP, 
    ROUND(ROUND(CAST(il.[Incurred Loss] as float), -1), 0) as [Incurred Loss], 
    CONCAT(CAST((ROUND(ROUND(CAST(il.[Incurred Loss] as float), -1), 0) / ROUND(ROUND(CAST(ep.EP as float), -1), 0) + 0.085) * 100.0 as decimal(10, 0)), '%') as [Loss Ratio with LAE]
FROM 
    #tempEarnedPremiumByTreatyYearAgentOwner ep
LEFT OUTER JOIN 
    #tempIncurredLossByTreatyYearAgentOwner il ON ep.AgencySysID = il.AgencySysID
                                               AND ep.LocationSysID = il.LocationSysID
                                               AND ep.TY = il.TY
WHERE 
    (ep.EP > 0 AND il.[Incurred Loss] > 0)
    AND ep.TY IN ('16-17', '17-18', '18-19', '19-20', '20-21')
ORDER BY 
    ep.AgentOwnerName ASC, ep.AgencyName ASC, ep.LocationName ASC, 
    ep.AgentNo ASC, ep.TY ASC;

Создает этот вывод:

enter image description here

И я необходимо, чтобы результаты отображались в следующем формате:

enter image description here

Будем весьма благодарны за любые предложения / указания. Я пытался сделать это в SSRS, но добавление нескольких групп столбцов кажется довольно трудным в SSRS. Спасибо.

1 Ответ

0 голосов
/ 28 апреля 2020

Ответ обновлен.

Оберните запрос в CTE, затем используйте sum(case when...):

with cte as (
    SELECT 
        ep.AgentOwnerName, ep.AgencyName, ep.LocationName, ep.AgentNo, 
        ep.TY, ROUND(ROUND(CAST(ep.EP as money), -1), 0) as EP, 
        ROUND(ROUND(CAST(il.[Incurred Loss] as float), -1), 0) as [Incurred Loss], 
        CONCAT(CAST((ROUND(ROUND(CAST(il.[Incurred Loss] as float), -1), 0) / ROUND(ROUND(CAST(ep.EP as float), -1), 0) + 0.085) * 100.0 as decimal(10, 0)), '%') as [Loss Ratio with LAE]
    FROM #tempEarnedPremiumByTreatyYearAgentOwner ep
    LEFT OUTER JOIN #tempIncurredLossByTreatyYearAgentOwner il 
        ON ep.AgencySysID = il.AgencySysID
        AND ep.LocationSysID = il.LocationSysID
        AND ep.TY = il.TY
    WHERE (ep.EP > 0 AND il.[Incurred Loss] > 0)
            AND ep.TY IN ('16-17', '17-18', '18-19', '19-20', '20-21')
    )
select AgentOwnerName, 
    AgencyName, 
    LocationName,
    AgentNo, 
    sum(case when TY = [16-17] then [EP] else 0 end) as [Earned Premium 16-18],
    ...,
    sum(case when TY = [16-17] then [Incurred Loss] else 0 end) as [Incurred Loss 16-17],
    sum(case when TY = [17-18] then [Incurred Loss] else 0 end) as [Incurred Loss 17-18],
    ...,
from cte
group by AgentOwnerName,
    AgencyName,
    LocationName,
    AgentNo;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...