【问题标题】:Using UNPIVOT twice in the same query在同一个查询中两次使用 UNPIVOT
【发布时间】:2022-01-18 16:49:42
【问题描述】:

您好,我遇到了以下问题:

我有一个大约 1600 行的表,其结构如下:

StoreID | Target1 | Target2 | Target3 | Date1      | Date2      | Date3
101     | X       | Y       | Z       | 01-01-2021 | 02-01-2021 | 03-01-2021

我想把这张表改成

StoreID | Target | TargetDate
101     | X      | 01-01-2021
101     | Y      | 02-01-2021
101     | Z      | 03-01-2021

我对 SQL 很陌生,但我的想法是将 UNPIVOT(Target1, Target2, Target3) 作为一列,将 UNPIVOT(Date1, Date2, Date3) 作为另一列。我相信这应该是可能的,因为两列的长度相同。

然而,许多努力都导致了相同的结果,我最终得到了太多行,因为每个目标最终都有 3 个日期。 有什么方法可以同时明确地取消旋转两列?

【问题讨论】:

标签: sql sql-server pivot unpivot


【解决方案1】:

最好使用VALUES 表结构:

SELECT YT.StoreID,
       V.Target,
       V.TargetDate
FROM dbo.YourTable YT
     CROSS APPLY (VALUES(Target1, Date1),
                        (Target2, Date2),
                        (Target3, Date3))V(Target,TargetDate);

【讨论】:

    猜你喜欢
    • 2013-11-07
    • 2013-11-26
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多