简体   繁体   English

如何在 SQL 服务器中创建 pivot 表

[英]How to create pivot table in SQL Server

Currently my T-SQL statement,目前我的 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;

Creates this output:创建此 output:

在此处输入图像描述

And I'm needing the results to be displayed in this format:我需要以这种格式显示结果:

在此处输入图像描述

Any suggestions/direction would be greatly appreciated.任何建议/方向将不胜感激。 I've tried doing this in SSRS but adding multiple column groups seems fairly difficult in SSRS.我已经尝试在 SSRS 中执行此操作,但在 SSRS 中添加多个列组似乎相当困难。 Thanks.谢谢。

Answer updated.答案已更新。

Wrap your query in a CTE, then use sum(case when...) :将您的查询包装在 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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM