SQL server 如何将列值转换为行
Posted
技术标签:
【中文标题】SQL server 如何将列值转换为行【英文标题】:SQL server how to convert column values into rows 【发布时间】:2016-01-28 08:26:24 【问题描述】:我会尽力解释我的问题。
我的表结构:
name Code_1 Code_1_value Code_2 Code_2_value Code_3 Code_3_value
N1 ABC1 10 ABC2 15 ABC3 6
N2 ABC1 3 NULL NULL BAA1 10
N3 ABC4 5 ABC2 11 ADC3 6
我想将此值转换为新格式:
name code value
N1 ABC1 10
N1 ABC2 15
N1 ABC3 6
N2 ABC1 3
我不知道逻辑上应该如何(枢轴?)
【问题讨论】:
【参考方案1】:查询-
DECLARE @t TABLE (
name VARCHAR(50) PRIMARY KEY,
Code_1 VARCHAR(50),
Code_1_value INT,
Code_2 VARCHAR(50),
Code_2_value INT,
Code_3 VARCHAR(50),
Code_3_value INT
)
INSERT INTO @t
VALUES
('N1', 'ABC1', 10, 'ABC2', 15 , 'ABC3', 6),
('N2', 'ABC1', 3 , NULL, NULL, 'BAA1', 10),
('N3', 'ABC4', 5 , 'ABC2', 11 , 'ADC3', 6)
SELECT name, code, value
FROM @t
CROSS APPLY (
VALUES (Code_1, Code_1_value), (Code_2, Code_2_value), (Code_3, Code_3_value)
) t2 (code, value)
WHERE code IS NOT NULL
输出 -
name code value
-------- -------- -----------
N1 ABC1 10
N1 ABC2 15
N1 ABC3 6
N2 ABC1 3
N2 BAA1 10
N3 ABC4 5
N3 ABC2 11
N3 ADC3 6
关于UNPIVOT
的帖子 -
http://blog.devart.com/is-unpivot-the-best-way-for-converting-columns-into-rows.html
【讨论】:
如果这个答案对你有帮助,你可能想accept它。这有助于其他追随您的人,并奖励 Devart 的努力。【参考方案2】:这也可以用 UNION 来完成
SELECT name,code_1 as code,code_1_value as value from yourTable
UNION ALL
SELECT name,code_2 as code,code_2_value as value from yourTable
UNION ALL
SELECT name,code_3 as code,code_3_value as value from yourTable
【讨论】:
以上是关于SQL server 如何将列值转换为行的主要内容,如果未能解决你的问题,请参考以下文章