Как установить несколько столбцов в строки в SQL-запрос - PullRequest
0 голосов
/ 11 июня 2019

Я хочу преобразовать столбцы в строки, используя SQL Server. Я уже пробовал отключить, но недостаточно знаний, чтобы сделать это только может сделать один столбец

SELECT Unit,Excess_Reactivity ,Refuelling_required,MBP,MCP ,CPPF,Date FROM yourTable // select statement

//insert  to check data
INSERT INTO yourTable
    (Unit,Excess_Reactivity ,Refuelling_required,MBP ,MCP ,CPPF ,Date)
VALUES
    ('TAP-4','52','test1','12','96','35','2019-06-11 00:00:00.000')

INSERT INTO yourTable
    (Unit,Excess_Reactivity ,Refuelling_required,MBP ,MCP ,CPPF ,Date)
VALUES
    ('TAP-2','52','test1','12','96','35','2019-06-11 00:00:00.000')

INSERT INTO yourTable
    (Unit,Excess_Reactivity ,Refuelling_required,MBP ,MCP ,CPPF ,Date)
VALUES
    ('TAP-3','52','test1','12','96','35','2019-06-11 00:00:00.000')

Это таблица

+--------+--------+---------+-----+-----+------+------------+
|  UNit  | excess | refuell | MBp | MCP | CPPF |    DATE    |
+--------+--------+---------+-----+-----+------+------------+
| TAPS-4 |     52 | test1   |  12 |  96 |   35 | 11/06/2019 |
| TAPS-3 |     52 | test1   |  13 |  96 |   35 | 11/06/2019 |
| TAPS-2 |     52 | test1   |  42 |  96 |   35 | 11/06/2019 |
| TAPS-1 |     52 | test1   |  18 |  96 |   35 | 11/06/2019 |
+--------+--------+---------+-----+-----+------+------------+

Я хочу вот так, как показано ниже:

Values   TAPS-4  TAPS-3  TAPS-2 TAPS-1
--------------------------------------
excess    52      52     52      52
MBp       12      13     42      18
MCP       96      96     96      96
CPPF      35      35     35      35

1 Ответ

1 голос
/ 11 июня 2019
  • сначала вам нужно отменить поворот таблицы, обратите внимание, что вам нужно преобразовать данные в один и тот же тип, потому что все данные будут идти в один и тот же столбец.
  • тогда вы можете повернуться к желаемому результату.
  • при необходимости конвертировать обратно в исходный тип данных.

SQL FIDDLE

WITH unpvt as (
  SELECT Unit, Attribute, Vals
  FROM ( SELECT Unit, 
                cast(excess as nvarchar(100)) as excess, 
                cast(MBp as nvarchar(100)) as MBp, 
                cast(MCP as nvarchar(100)) as MCP,  
                cast(CPPF as nvarchar(100)) as CPPF
         FROM Table1) as p
  UNPIVOT
       (Vals FOR Attribute in (excess, MBp, MCP, CPPF)
       ) as unpvt
)
SELECT Attribute, [TAPS-4],  [TAPS-3], [TAPS-2], [TAPS-1]
FROM ( SELECT Unit, Attribute, Vals
       FROM unpvt) p 
PIVOT (
         MAX(Vals) FOR  Unit IN 
         ([TAPS-4], [TAPS-3], [TAPS-2], [TAPS-1])
      ) pvt

OUTPUT

| Attribute | TAPS-4 | TAPS-3 | TAPS-2 | TAPS-1 |
|-----------|--------|--------|--------|--------|
|      CPPF |     35 |     35 |     35 |     35 |
|    excess |     52 |     52 |     52 |     52 |
|       MBp |     12 |     13 |     42 |     18 |
|       MCP |     96 |     96 |     96 |     96 |

Примечание: Попробуйте SELECT * FROM unpvt в скрипте sql, чтобы увидеть промежуточный результат.

...