繁体   English   中英

仅将一些行转换为列

[英]Convert only some rows into columns

我有以下表格数据

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

上表中的所需输出结果:

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选择查询中使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM