【问题标题】:How to unpivot columns using CROSS APPLY in SQL Server 2012如何在 SQL Server 2012 中使用 CROSS APPLY 取消透视列
【发布时间】:2018-07-17 04:22:48
【问题描述】:

我想使用 CROSS APPLY 来 UNPIVOT 多列。

CGL, CPL, EO 列应成为 Coverage Type,CGL, CPL, EO 的值应位于 Premium 列中,CGLTria,CPLTria,EOTria 的值应位于 Tria Premium 列中

declare @TestDate table  ( 
                            QuoteGUID varchar(8000), 
                            CGL money, 
                            CGLTria money, 
                            CPL money,
                            CPLTria money,
                            EO money,
                            EOTria money
                            )

INSERT INTO @TestDate (QuoteGUID, CGL, CGLTria, CPL, CPLTria, EO, EOTria)
VALUES ('2D62B895-92B7-4A76-86AF-00138C5C8540', 2000, 160, 674, 54, 341, 0),
       ('BE7F9483-174F-4238-8931-00D09F99F398', 0, 0, 3238, 259, 0, 0),
       ('BECFB9D8-D668-4C06-9971-0108A15E1EC2', 0, 0, 0, 0, 0, 0)

SELECT * FROM @TestDate

输出:

结果应该是这样的:

【问题讨论】:

    标签: sql-server tsql sql-server-2012 cross-apply


    【解决方案1】:

    一种快速简便的方法是使用VALUES

    示例

    select A.QuoteGUID
          ,B.*
     From  @TestDate A
     Cross Apply ( values ('CGL',CGL,CGLTria)
                         ,('CPL',CPL,CPLTria)
                         ,('EO',EO,EOTria)
                 ) B (CoverageType,Premium,TiraPremium)
    

    退货

    【讨论】:

    • 太棒了!谢谢约翰!
    • @Oleg 乐于助人
    • Itzik Ben-Gan 有一篇很好的关于反透视​​的文章,这里包含了这种技术 - itprotoday.com/sql-server/unpivoting-data 总而言之,这是最好的技术。
    • @ChrisKoester 谢谢,我同意。 CROSS APPLY 允许横向查询,而 values () 允许更多的灵活性和控制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    相关资源
    最近更新 更多