首页 > 解决方案 > 反透视具有多列的 SQL 表

问题描述

我想围绕多列取消透视 SQL 表。我尝试了一个普通的 UNPIVOT 语句,但它只围绕一个值进行。请参阅此链接,例如:https ://codingsight.com/understanding-pivot-unpivot-and-reverse-pivot-statements 。

我试图在下图中说明我的数据以及我想要的结果。最上面的表是 SQL 表中的数据样本。我使用了 3 种材料,但实际上有 20 种。

下表是我想要的结果。

数据位于 SQL 2008-r2 服务器上。

有关如何执行此任务的任何指示?

在此处输入图像描述

标签: sqlsql-server

解决方案


考虑使用cross apply,如下所示:

select t.date, t.product, x.*
from mytable t
cross apply (values 
    (container1material, container1amount),
    (container2material, container2amount),
    (container3material, container3amount)
) x(material, amount)

推荐阅读