Простое транспонирование строк как столбцов в SQL Server 2012 - PullRequest
0 голосов
/ 25 мая 2020

У меня есть данные ниже.

DECLARE @yourtable TABLE (
    col1 CHAR(2)
    ,col2 VARCHAR(10)
    );

INSERT @yourtable (
    col1
    ,col2
    )
VALUES (
    'p1'
    ,'first'
    )
    ,(
    'x1'
    ,'xvalue'
    )
    ,(
    'y1'
    ,'yvalue'
    )
    ,(
    'z1'
    ,'zvalue'
    );

Я хочу, чтобы результат отображался, как показано ниже, на SQL Server 2012

p1          x1          y1          z
----------- ----------- ----------- -----------
first      xvalue     yvalue     zvalue

Здесь количество строк может быть другим.

Здесь у меня всего 4 строки. Но иногда это может быть и 5 рядов.

1 Ответ

1 голос
/ 25 мая 2020
CREATE TABLE yourtable(
    col1 CHAR(2)
    ,col2 VARCHAR(10)
    );

INSERT INTO yourtable (
    col1
    ,col2
    )
VALUES (
    'p1'
    ,'first'
    )
    ,(
    'x1'
    ,'xvalue'
    )
    ,(
    'y1'
    ,'yvalue'
    )
    ,(
    'z1'
    ,'zval'
    );
DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.col1) 
            FROM yourtable c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT  ' + @cols + ' from 
            (
                select col1,col2
                from yourtable
           ) x
            pivot 
            (
                 max(col2)
                for col1 in (' + @cols + ')
            ) p '


execute(@query)
p1    | x1     | y1     | z1  
:---- | :----- | :----- | :---
first | xvalue | yvalue | zval

db <> fiddle здесь

...