在同一个查询中使用 UNPIVOT 两次

Using UNPIVOT twice in the same query

您好,我 运行 遇到以下问题:

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

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

我想运行把这个table变成

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 个日期。 有什么方法可以同时明显地取消旋转两列?

你最好使用 VALUES table 构造:

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