Sql server 谢谢你的回复。在现实生活中,我的数据集由大约60列(需要保持原样)和20列(需要取消激活)组成。联合所有人是一个很好的方式,但它将过于资源密集型。我将在几分钟后发布数据示例,然后您可能会使用这种方法取消对cte中大约20列的IVOT,然后通过主键再次连接到

Sql server 谢谢你的回复。在现实生活中,我的数据集由大约60列(需要保持原样)和20列(需要取消激活)组成。联合所有人是一个很好的方式,但它将过于资源密集型。我将在几分钟后发布数据示例,然后您可能会使用这种方法取消对cte中大约20列的IVOT,然后通过主键再次连接到,sql-server,tsql,sql-server-2012,unpivot,Sql Server,Tsql,Sql Server 2012,Unpivot,谢谢你的回复。在现实生活中,我的数据集由大约60列(需要保持原样)和20列(需要取消激活)组成。联合所有人是一个很好的方式,但它将过于资源密集型。我将在几分钟后发布数据示例,然后您可能会使用这种方法取消对cte中大约20列的IVOT,然后通过主键再次连接到主表。 SELECT TOP 3 QuoteGUID, CoverageType, Premium FROM Align_EnvionmentalRating_PremiumHistory UNPIVOT (Premi


谢谢你的回复。在现实生活中,我的数据集由大约60列(需要保持原样)和20列(需要取消激活)组成。联合所有人是一个很好的方式,但它将过于资源密集型。我将在几分钟后发布数据示例,然后您可能会使用这种方法取消对cte中大约20列的IVOT,然后通过主键再次连接到主表。
SELECT TOP 3 
    QuoteGUID, CoverageType, Premium
FROM
    Align_EnvionmentalRating_PremiumHistory
UNPIVOT
    (Premium FOR CoverageType  IN (CGL, CPL, EO)) AS up
select top 3 [Policy Number],
[Policy Effective Date],
'17.1' as [Annual Statement Line],
CGL,
CGLTria,
CPL,
CPLTria,
EO,
EOTria,
Fees,
[Risk State]
from #Test
create table dbo.TestDate  ( 
                            PolicyNumber varchar(50), 
                            PolicyEffectiveDate datetime, 
                            AnnualStatementLine decimal(5,1), 
                            CGL money, 
                            CGLTria money, 
                            CPL money,
                            CPLTria money,
                            EO money,
                            EOTria money,
                            Fees money,
                            RiskState varchar(2)
                            )
INSERT INTO dbo.TestDate (PolicyNumber, PolicyEffectiveDate , AnnualStatementLine, CGL , CGLTria , CPL ,CPLTria ,EO ,EOTria ,Fees ,RiskState )
values                          ('ENV560000001-00','2018-01-11 23:21:00',17.1,2000,160,674,54,341,0,250,'TX'),
                                ('ENV560000002-00','2018-01-11 00:56:00',17.1,0,0,3238,259,0,0,250,'NV'),
                                ('ENV560000003-00','2018-01-12 01:10:00',17.1,0,0,6045,484,0,0,250,'ND'),
                                ('ENV560000004-00','2018-01-14 01:18:00',17.1,0,0,0,0,0,0,0,'ND')
select * from dbo.TestDate 
SELECT
    ID  =   a1.ID,
    CoverageType    =   'CGL',
    Premium =   a1.CGL,
    TriaPremium =   a1.CGLTria
FROM
     Align_EnvionmentalRating_PremiumHistory AS a1
WHERE
    a1.CGL <> 0
UNION ALL
SELECT
    ID  =   a2.ID,
    CoverageType    =   'CPL',
    Premium =   a2.CPL,
    TriaPremium =   a2.CPLTria
FROM
     Align_EnvionmentalRating_PremiumHistory AS a2
WHERE
    a2.CPL <> 0
UNION ALL
SELECT
    ID  =   a3.ID,
    CoverageType    =   'EO',
    Premium =   a3.EO,
    TriaPremium =   a3.EOTria
FROM
     Align_EnvionmentalRating_PremiumHistory AS a3
WHERE
    a3.EO <> 0
with NormalizedData
(
    PolicyNumber
    , CoverageType
    , Premium
    , TriaPremium
) as
(
    SELECT PolicyNumber
        , 'CGL'
        , CGL
        , CGLTria
    FROM TestDate

    UNION ALL

    SELECT PolicyNumber
        , 'CPL'
        , CPL
        , CPLTria
    FROM TestDate

    UNION ALL

    SELECT PolicyNumber
        , 'EO'
        , EO
        , EOTria
    FROM TestDate
)

select td.PolicyNumber
    , td.PolicyEffectiveDate
    , td.AnnualStatementLine
    , nd.CoverageType
    , nd.Premium
    , nd.TriaPremium
    , td.RiskState
from TestDate td
join NormalizedData nd on nd.PolicyNumber = td.PolicyNumber
order by td.PolicyNumber
    , nd.CoverageType
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 A.QuoteGUID
      ,B.*
 From  @TestDate A
 Cross Apply ( values ('CGL',CGL,CGLTria)
                     ,('CPL',CPL,CPLTria)
                     ,('CPL',EO,EOTria)
             ) B (CoverageType,Premium,TiraPremium)