[英]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.