同时旋转数字和非数字列

问题描述 投票:0回答:2

我有一个特殊要求,即向上旋转两列,一个数字和一个字符串。我非常熟悉SQL枢纽,但是无法为此找到解决方案。

我的原始数据就像:

Country | Segment | Year | Parameter_Name | Parameter_Value_Numeric | Parameter_Value_String    
USA      | 1      | 2003 | Datapoint1     | 100                     | null
USA      | 1      | 2003 | Datapoint2     | 148                     | null
USA      | 1      | 2003 | Datapoint3     | null                    | Upper values(s)
USA      | 2      | 2003 | Datapoint1     | 121                     | null
USA      | 2      | 2003 | Datapoint2     | 180                     | null
USA      | 2      | 2003 | Datapoint3     | null                    | Medium values(s)

我想要的结果是这样的:

Country  | Segment       | Year | Datapoint1     | Datapoint2     | Datapoint3
USA      | 1             | 2003 | 100            | 148            | Upper values(s)
USA      | 2             | 2003 | 121            | 180            | Medium values(s)

面临的问题是,数据点1和数据点2为float,数据点3为nvarchar。因此,pivot只能使用其中之一。

sql sql-server tsql pivot sql-server-2014
2个回答
0
投票

您可以在逻辑下面尝试这个-

DEMO HERE

SELECT Country,Segment,Year,
MAX(CASE WHEN Parameter_Name = 'Datapoint1' THEN Parameter_Value_Numeric END) Datapoint1,
MAX(CASE WHEN Parameter_Name = 'Datapoint2' THEN Parameter_Value_Numeric END) Datapoint2,
MAX(CASE WHEN Parameter_Name = 'Datapoint3' THEN Parameter_Value_String END) Datapoint3
FROM your_table
GROUP BY Country,Segment,Year

0
投票

您可以在透视之前将值转换为varchar

SELECT * FROM (
    SELECT Country, Segment, Year, Parameter_Name, 
        ISNULL(CAST(Parameter_Value_Numeric AS varchar(20)) , Parameter_Value_String) AS Parameter_Value 
        FROM SampleData ) SRC
PIVOT (MAX(Parameter_Value) FOR Parameter_Name IN ([Datapoint1], [Datapoint2], [Datapoint3])) PVT
© www.soinside.com 2019 - 2024. All rights reserved.