Tsql SQL Server中多列的透视

Tsql SQL Server中多列的透视,tsql,sql-server-2012,pivot,Tsql,Sql Server 2012,Pivot,我有3个方面: Melt, HSM, LSM 在某些地区生产的每个订单都有以下数据: Start Date, Finish Date, Weight 我在SQLServer2012(顶部图像)中有一个视图,如何使用tsql创建生成底部图像的轴? 您可以使用条件聚合: SELECT [Order], MAX(CASE WHEN Area = 'Melt' THEN StartDate END) AS Melt_SDate, MAX(CASE WHEN Area = 'Mel

我有3个方面:

Melt, HSM, LSM
在某些地区生产的每个订单都有以下数据:

Start Date, Finish Date, Weight
我在
SQLServer2012
(顶部图像)中有一个
视图
,如何使用tsql创建生成底部图像的轴?
您可以使用条件聚合:

SELECT [Order],
    MAX(CASE WHEN Area = 'Melt' THEN StartDate   END) AS Melt_SDate,
    MAX(CASE WHEN Area = 'Melt' THEN FinisthDate END) AS Melt_FDate,
    MAX(CASE WHEN Area = 'Melt' THEN Weight      END) AS Melt_Weight,

    MAX(CASE WHEN Area = 'HSM' THEN StartDate    END) AS HSM_SDate,
    MAX(CASE WHEN Area = 'HSM' THEN FinisthDa    END) AS HSM_FDate,
    MAX(CASE WHEN Area = 'HSM' THEN Weight       END) AS HSM_Weight,

    MAX(CASE WHEN Area = 'LSM' THEN StartDate    END) AS LSM_SDate,
    MAX(CASE WHEN Area = 'LSM' THEN FinisthDate  END) AS LSM_FDate,
    MAX(CASE WHEN Area = 'LSM' THEN Weight       END) AS LSM_Weight
FROM tab_name
GROUP BY [Order];   -- ORDER is reserved word, you should avoid such identifiers;
为了使它更简洁,您可以使用
IIF

MAX(CASE WHEN Area = 'Melt' THEN StartDate   END) AS Melt_SDate,
<=>
MAX(IIF(Area='Melt',StartDate,NULL)) AS Melt_SDate,
MAX(面积='Melt'然后开始日期结束时的情况)作为Melt\u SDate,
最大值(IIF(面积=熔化),起始日期,空值)为熔化日期,

在性能POV中,这种方式更好,或者使用
Pivot
功能?性能应该比
Pivot
更好,因为您必须旋转3次才能获得相同的结果