仅将某些行转换为列

Convert only some rows into columns

我有以下 table 数据

Id  Name    Email       Address
1   abc  abc@xyz.com  abc_address
2   pqr  pqr@xyz.com  pqr_address
3   mno  mno@xyz.com  mno_address

上面的期望输出结果table:

CC1_Name CC1_Email   CC1_Address  CC2_Name  CC2_Email   CC2_Address   CC3_Name  CC3_Email     CC3_Address
  abc   abc@xyz.com  abc_address    pqr    pqr@xyz.com  pqr_address      mno    mno@xyz.com   mno_address

我知道可以在 SQL select 查询中使用 PIVOT 函数。但是由于某些原因我无法实现它。

你可以使用这样一个简单的方法:

SELECT 
    MAX(CASE WHEN Id = 1 THEN Name END) AS CC1_Name,
    MAX(CASE WHEN Id = 1 THEN Email END) AS CC1_Email,
    MAX(CASE WHEN Id = 1 THEN Address END) AS CC1_Address,

    MAX(CASE WHEN Id = 2 THEN Name END) AS CC2_Name,
    MAX(CASE WHEN Id = 2 THEN Email END) AS CC2_Email,
    MAX(CASE WHEN Id = 2 THEN Address END) AS CC2_Address,

    MAX(CASE WHEN Id = 3 THEN Name END) AS CC3_Name,
    MAX(CASE WHEN Id = 3 THEN Email END) AS CC3_Email,
    MAX(CASE WHEN Id = 3 THEN Address END) AS CC3_Address
FROM yourTable;

要以动态方式使用查询,您需要像这样使用动态 SQL:

DECLARE @sql nvarchar(max) = '';

SELECT @sql = @sql + ',' + 'MAX(CASE WHEN Id = ' + CAST(Id AS varchar(3)) + 'THEN Name END) AS CC'+ CAST(Id AS varchar(3)) + '_Name,' 
                + 'MAX(CASE WHEN Id = ' + CAST(Id AS varchar(3)) + 'THEN Email END) AS CC' + CAST(Id AS varchar(3)) + '_Email,' 
                + 'MAX(CASE WHEN Id = ' + CAST(Id AS varchar(3)) + 'THEN Address END) AS CC' + CAST(Id AS varchar(3)) + '_Address'
FROM yourTable;

SET @sql = 'SELECT ' + SUBSTRING(@sql, 2, LEN(@sql)) + ' FROM yourTable';
EXEC(@sql);