如何在SQL Server 2012中使用CROSS APPLY对列进行拆分

Ser*_*dia 4 t-sql sql-server cross-apply sql-server-2012

我想使用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
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

结果应该是这样的:

在此输入图像描述

Joh*_*tti 8

一个快速简便的方法是 VALUES

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

返回

在此输入图像描述