Insert and update in a cursor in SQL Server

心已入冬 提交于 2019-11-29 18:01:36

Use PIVOT as

SELECT Code,
       [22] Data1,
       [33] Data2,
       [43] Data3
FROM
    (
      SELECT *
      FROM T
    ) TBL
    PIVOT
    (
      MAX(Data) FOR Data IN([22],[33],[43])
    ) PVT

Demo

For dynamic pivot

CREATE TABLE T
(
  Code VARCHAR(45),
  Data INT
);

INSERT INTO T VALUES
('SL Payroll',    22),
('SL Payroll',    33),
('SL Payroll',    43);

DECLARE @IN VARCHAR(MAX) = '',
        @Cols VARCHAR(MAX) = '';

SELECT @IN = @IN + ',' + QUOTENAME(Data),
       @Cols = @Cols + ',' + QUOTENAME(Data) + ' AS Data'+
               CAST(ROW_NUMBER()OVER(ORDER BY (SELECT NULL)) AS VARCHAR)
FROM T;

SELECT @IN = STUFF(@IN, 1, 1, ''), @Cols = STUFF(@Cols, 1, 1, '');

DECLARE @SQL NVARCHAR(MAX) = N'SELECT Code, ' +
                               @Cols+
                               ' FROM (SELECT * FROM T) TBL PIVOT (MAX(Data) FOR Data IN('+
                               @IN+
                               ')) PVT';
     EXECUTE sp_executesql @SQL;

Demo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!