用于列的不同关键字,更改该列值的顺序,影响 Pivot table

Distinct keyword used for a column, changes order of values of that column, affects Pivot table

SELECT **@COLS** = STUFF((SELECT DISTINCT ',' + QUOTENAME(BR.EMPLOYEENAME) FROM **#TMP_RESULTS** BR  FOR XML PATH('')),1,1,''); 

SET @QUERY = 'INSERT INTO #RESULTS SELECT DISTINCT P.EMP_ID,'+**@COLS**+' FROM     
      (                  
      SELECT EMP_ID,EMPLOYEENAME,OFFICE_ID,VALUE FROM **#TMP_RESULTS** BR) AS X    
      PIVOT     
      (    
       MAX( X.VALUE)    
       FOR X.EMPLOYEENAME IN (' + **@COLS** + ')    
      ) AS P '; 

这里的 EmployeeName 是其值在透视时变为列 headers 的列。 @COLSEmployeeName 列上使用 Distinct 关键字,因此 EmployeeNames 所选的顺序将会改变。 在 SQL 中使用 Pivot table 时,它期望 @COLS(即列 headers/EmployeeName)与源 table 中的顺序相同TMP_RESULTS。但是 @COLSEmployeeNames 顺序不同。因此,我们在 #RESULTS table 中得到了不希望的结果。也就是说,Column Headers 被交换为值。 为了解决这个问题,我们可以在 ID 上使用 Distinct 和分组,或者我们可以删除 Distinct 关键字并将来自 xml 路径的不同 column-headers 添加到虚拟 table 中,因为相同的顺序将也用于 TMP_RESULTS table,旋转不会交换结果。

@COLS 从温度参数中获取值而不是 TMP_RESUTLS。

TMP_RESULTS 每个 EmployeeNames 都有多个值。 EmployeeNames 的顺序正确,如 XML 中发送的那样。 TEMPPARAMETERS 和 TMP_RESUTLS 都具有相同的 EmployeeNames 顺序。 TEMPPARAMETERS 具有不同的 EmployeeNames,最初取自 XML。再次使用 'Distinct',将更改添加到 @COLS 的 EmployeeNames 的顺序。现在@COLS 和TMP_RESUTLS 的EmployeeNames 订单不同了。因此,使用@COLS 作为 headers 和 TMP_RESUTLS 的 MAX(Values) 将交换列中的结果。 意思是 Distinct 改变了列的顺序,这对 Pivot table 结果有不好的影响。