![](/img/trans.png)
[英]How convert multiple results rows to single row SQL with respective values
[英]Multiple Columns to Row with respective values
试图将多列放入行中。 预期的结果是
这是我尝试过的示例数据。 如果整体速度更快,我也愿意接受 unpivot。 完整数据有 15 个 AttributeID、AttributeData 列。
DROP TABLE Attribute;
CREATE TABLE Attribute
(
Producttitle varchar(200),
AttributeID_1 varchar(50),
AttributeData_1 varchar(50),
AttributeID_2 varchar(50),
AttributeData_2 varchar(50),
AttributeID_3 varchar(50),
AttributeData_3 varchar(50)
);
INSERT INTO Attribute
VALUES ('title1', '3145', 'Specific', '30', 'Yes', '40', 'Pink')
INSERT INTO Attribute
VALUES ('title2', '17', 'Stainless', '19', 'smoke', '19', 'Something');
SELECT
Producttitle,
[AttributeID],
[AttributeData]
FROM
Attribute
CROSS APPLY
(SELECT 'Indicator1', [AttributeID_1] UNION ALL
SELECT 'Indicator2', [AttributeID_2] UNION ALL
SELECT 'Indicator3', [AttributeID_3]) c (indicatorname, [AttributeID])
CROSS APPLY
(SELECT 'Indicator1', [AttributeData_1] UNION ALL
SELECT 'Indicator2', [AttributeData_2] UNION ALL
SELECT 'Indicator3', [AttributeData_3]) d (indicatorname, [AttributeData]);
您可以使用cross apply
来取消透视数据集。 values()
更简单:
select a.title, x.*
from attribute a
cross apply (values
(a.attributeId_1, a.attributeData_1),
(a.attributeId_2, a.attributeData_2),
(a.attributeId_3, a.attributeData_3)
) as x(attributeId, attributeData)
请注意,这是有效的,因为两组列具有一致的数据类型 - 否则将需要额外的转换。
GMB 的解决方案真的很酷,但基本工会也可以:
SELECT Producttitle, AttributeID_1 AttributeID, AttributeData_1 AttributeData
from attribute
union
SELECT Producttitle, AttributeID_2 AttributeID, AttributeData_2 AttributeData
from attribute
union
SELECT Producttitle, AttributeID_3 AttributeID, AttributeData_3 AttributeData
from attribute
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.