使用标签列进行透视(U-SQL 或 SQL)[关闭]

Posted

技术标签:

【中文标题】使用标签列进行透视(U-SQL 或 SQL)[关闭]【英文标题】:Pivot with Label Column (U-SQL or SQL) [closed] 【发布时间】:2020-08-19 22:26:20 【问题描述】:

我正在尝试将列列表转换为单个列中的行(我将其称为“预测”),但有一个指示列指出该值来自哪个列。

这是数据当前的样子:

这是我想要的样子:

【问题讨论】:

请向我们展示您的尝试。 请将数据添加为格式化文本不是图像。它占用的空间更少,更易于阅读,最重要的是允许我们将其复制粘贴出来进行测试。最好提供 DDL/DML 来创建示例数据。 【参考方案1】:

您可以使用横向连接将列取消透视到行,同时跟踪原始列:

select t.productID, x.*
from mytable t
cross apply (values 
    (period1, 1), (period2, 2), (period3, 3)
) as x(forecast, periodNum)
order by t.productID, x.periodNum

【讨论】:

【参考方案2】:

好的,我通过使用 UNPIVOT 解决了这个问题! (仅供参考,在 U-SQL 中使用 Cross Apply 比在普通 SQL 中更复杂,所以我最终没有使用那种方法)

我在 U-SQL 中的语法如下所示:

@a = SELECT DISTINCT
ProductID
,Lag
,Forecast
FROM [my table] AS t
UNPIVOT
(
Forecast FOR Lag IN (PERIOD1,PERIOD2,PERIOD3)
) AS Unpvt
ORDER BY ColumnName
FETCH 50 ROWS;


OUTPUT @a
TO "/outputlocation.tsv"
USING Outputters.Tsv(outputHeader:true);

【讨论】:

以上是关于使用标签列进行透视(U-SQL 或 SQL)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 数据透视表从一列变为两列

是否可以使用 SQL Server 使用相同的数据透视列进行多个数据透视

在 SQL Server 中使用逐行总和进行透视[关闭]

合并数据透视表中的两列

SQL 动态数据透视表列顺序

如何使用U-SQL修改文本文件