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

Posted

技术标签:

【中文标题】在同一个查询中两次使用 UNPIVOT【英文标题】:Using UNPIVOT twice in the same query 【发布时间】: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 Server unpivot multiple columns 【参考方案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);

【讨论】:

以上是关于在同一个查询中两次使用 UNPIVOT的主要内容,如果未能解决你的问题,请参考以下文章

SQL 查询优化:在事实表中两次使用相同指标的最佳方法是啥?

如何在 Django 中两次在查询中使用过滤器

在选择查询中两次调用用户定义的函数会导致效率低下吗?

在一个查询中两次从同一个表中提取时出现问题

在php中两次调用相同的函数时出错

spring+mybatis中两次相同条件查询时 session一级缓存与数据库隔离级别需要注意的点