我有一个特殊要求,即向上旋转两列,一个数字和一个字符串。我非常熟悉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只能使用其中之一。
您可以在逻辑下面尝试这个-
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
您可以在透视之前将值转换为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