2016-10-24 5 views
1

Я хочу преобразовать строки в столбцы с помощью pivot. Если он имеет только два столбца, мы можем это сделать. Возможно ли, что мы можем повернуть, если таблица имеет более двух столбцов?Преобразование строк в столбцы более чем 2 столбцов SQL Server

Например:

C1 C2  C3 
________________________ 
    A 10  1000 
    B 20  1000 
    C 30  1500 

Ожидаемый результат:

A   B  C 
10  20  30 
1000  1000  1500 
+0

https://blogs.msdn.microsoft.com/kenobonn/2009/03/22/pivot-on-two-or-more-fields- в-SQL-сервер / –

ответ

0

Это один из способов я нашел, даже вы можете попробовать с одним шарниром, вместо того, чтобы использовать комплекс CTE-х

WITH cte 
     AS (SELECT Max(a) a, 
        Max(b) b, 
        Max(c) c 
      FROM (SELECT * 
        FROM #Table1)a 
        PIVOT (Avg(c2) 
          FOR c1 IN (a, 
            b, 
            c)) AS c), 
     c2 
     AS (SELECT Max(a) a, 
        Max(b) b, 
        Max(c) c 
      FROM (SELECT * 
        FROM #Table1)a 
        PIVOT (Avg(c3) 
          FOR c1 IN (a, 
            b, 
            c)) AS c3) SELECT * 
    FROM cte 
    UNION ALL 
    SELECT * 
    FROM c2 
0

вот простой способ использования PIVOT и конструктор значений таблиц

CREATE TABLE myTable 
    ([C1] varchar(1), [C2] int, [C3] int) 
; 

INSERT INTO myTable 
    ([C1], [C2], [C3]) 
VALUES 
    ('A', 10, 1000), 
    ('B', 20, 1000), 
    ('C', 30, 1500) 
; 


SELECT [A],[B],[C] 
FROM (
     SELECT ca.* 
     FROM myTable mt 
       CROSS APPLY (VALUES(mt.C1, 1, mt.C2),(mt.C1, 2, mt.C3)) ca(col, rn, val) 
     ) t 
PIVOT (
    MAX(val) 
    FOR col IN ([A],[B],[C]) 
) p 

Крест Применить создаст новую строку для каждого столбца (С2, С3) col является значением С1 (А, В, С) rn просто значение RowNumber, чтобы отделить значения, так ОСИ не будет в сочетании их и просто выбрать MAX, а val - это только значения C2 и C3

Смежные вопросы