Использование функции Pivot в SQL Server - PullRequest
0 голосов
/ 23 января 2019

У меня есть таблица ниже

Code            Data
SL Payroll       1
GV Payroll       3
Global Payroll   1
TimeHCM          1
SL Payroll       0
GV Payroll       0
Global Payroll  0
TimeHCM          0
SL Payroll       0
GV Payroll       0
Global Payroll   0
TimeHCM          0

Я использую функцию поворота, чтобы сгладить данные

Select *
  From (
        Select [Code]
              ,[Data]
              ,[Col] = concat('Data',Row_Number() over (Partition By [Code] Order by 1/0))
         From  #BidStatusCalculation
       ) src
 Pivot (max([Data]) for [Col] in ([Data1],[Data2],[Data3],[Data4],[Data5],[Data6],[Data7],[Data8],[Data9],[Data10],[Data11],[Data12])) pvt

, и я получаю результат ниже

Code           Month1   Month2   Month3
GV Payroll      0        0        **3** 

Проблема в том, что данные транспонируются снизу вверх, то есть они берут первую найденную запись и делают ее последней, и я хотел, чтобы она была такой, как показано ниже

Code           Month1   Month2   Month3
GV Payroll      **3**       0        0

Какое изменение я долженсделать запрос?

Обновление Я добавил столбец SortOrder, как было предложено, и таблица теперь показана ниже.

Code            Data    SortOrder
    SL Payroll       1     1
    GV Payroll       3     2
    Global Payroll   1     3
    TimeHCM          1     4
    SL Payroll       0      1
    GV Payroll       0      2
    Global Payroll  0      3
    TimeHCM          0     4
    SL Payroll       0     ....
    GV Payroll       0
    Global Payroll   0
    TimeHCM          0

1 Ответ

0 голосов
/ 24 января 2019

Это ваш подзапрос:

    Select [Code], [Data],
           [Col] = concat('Data', Row_Number() over (Partition By [Code] Order by 1/0))
     From #BidStatusCalculation

order by 1/0 - очень странная конструкция.Это эквивалентно: order by (select null).То есть заказа нет.

Ну, у тебя проблема.Таблицы, даже временные таблицы, представляют неупорядоченные наборы в SQL.Если вы полагаетесь на какой-то врожденный порядок таблицы для ваших результатов, то вам не повезло.SQL этого не делает.

Вам нужен столбец, в котором указан порядок - предположительно какой-то столбец даты или идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...