Различное ключевое слово, используемое для столбца, изменяет порядок значений этого столбца, влияет на сводную таблицу - PullRequest
0 голосов
/ 16 апреля 2019
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 '; 

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

@ COLS принимает значения из TEMPPARAMETERS, а не TMP_RESUTLS.

TMP_RESULTS имеет несколько значений для каждого из EmployeeNames.Имена Employee в правильном порядке, как отправлено в XML.И TEMPPARAMETERS, и TMP_RESUTLS имеют одинаковый порядок EmployeeNames.TEMPPARAMETERS имеет различные имена сотрудников, изначально взятые из XML.Повторное использование «Distinct» снова изменит порядок EmployeeNames, добавляемых в @COLS.Теперь порядки EmployeeNames в @COLS и TMP_RESUTLS различаются.Следовательно, используя @COLS в качестве заголовков и MAX (значения) TMP_RESUTLS, вы будете обмениваться результатами в столбцах. Значение Distinct меняет порядок столбцов, что плохо влияет на результаты сводной таблицы.

0 голосов
/ 16 апреля 2019

Здесь EmployeeName - это столбец, значения которого становятся заголовками столбцов при повороте. @COLS использует ключевое слово Distinct для столбца EmployeeName, из-за чего изменится порядок выбранного EmployeeNames. При использовании сводной таблицы в SQL ожидается, что @COLS (т. Е. Заголовки столбцов / EmployeeName) будут в том же порядке, что и в исходной таблице, равной TMP_RESULTS. Но @COLS имеет другой порядок EmployeeNames. В связи с этим мы получаем нежелательные результаты в таблице #RESULTS. То есть заголовки столбцов меняются значениями. Чтобы решить эту проблему, мы можем использовать Distinct и сгруппировать по ID, или мы можем удалить ключевое слово Distinct и добавить отдельные заголовки столбцов, идущие из пути xml, в фиктивную таблицу, и, поскольку тот же порядок будет использоваться и в таблице TMP_RESULTS, поворот не поменяет местами результаты.

...