sql - SQL 透视字符串/多个非透视列
问题描述
SQL 新手,需要一些帮助“透视”表。这就是我想要做的......
Oracle 数据库格式:
╔═════════════╦══════════╦═══════════╦═══════════╗
║ Sale Start ║ Sale End ║ Store ║ Promotion ║
╠═════════════╬══════════╬═══════════╬═══════════╣
║ 1/1 ║ 4/1 ║ Nike ║ 10% OFF ║
║ 1/1 ║ 4/1 ║ Adidas ║ 20% OFF ║
║ 1/1 ║ 6/1 ║ Reebok ║ 30% OFF ║
║ 2/1 ║ 4/1 ║ Nike ║ 40% OFF ║
║ 2/1 ║ 4/1 ║ Reebok ║ 50% OFF ║
║ 3/1 ║ 4/1 ║ Adidas ║ 60% OFF ║
║ 3/1 ║ 4/1 ║ Sketchers ║ 70% OFF ║
╚═════════════╩══════════╩═══════════╩═══════════╝
期望的输出:
╔═════════════╦══════════╦═════════╦═════════╦═════════╗
║ Sale Start ║ Sale End ║ Nike ║ Adidas ║ Reebok ║
╠═════════════╬══════════╬═════════╬═════════╬═════════╣
║ 1/1 ║ 4/1 ║ 10% OFF ║ 20% OFF ║ ║
║ 1/1 ║ 6/1 ║ ║ ║ 30% OFF ║
║ 2/1 ║ 4/1 ║ 40% OFF ║ ║ 50% OFF ║
║ 3/1 ║ 4/1 ║ ║ 60% OFF ║ ║
╚═════════════╩══════════╩═════════╩═════════╩═════════╝
要回答潜在问题:
- 输出应仅列出唯一的销售日期期间。
- 我不想旋转所有商店,例如我不需要拉 Sketchers 的行。
Stack Overflow 的新手,所以如果我能澄清任何事情,请告诉我。谢谢!
解决方案
我认为您只需要一个标准的数据透视查询:
SELECT
[Sale Start],
[Sale End],
MAX(CASE WHEN Store = 'Nike' THEN Promotion END) AS Nike,
MAX(CASE WHEN Store = 'Adidas' THEN Promotion END) AS Adidas,
MAX(CASE WHEN Store = 'Reebok' THEN Promotion END) AS Reebok
FROM yourTable
WHERE Store IN ('Nike', 'Adidas', 'Reebok')
GROUP BY
[Sale Start],
[Sale End];
不包括 Sketchers 数据的要求是通过在 select 子句中没有一个术语来旋转该数据来满足的。
请注意,您没有告诉我们您使用的是哪个数据库。我假设 SQL Server 可以使用方括号对带有空格的列名进行转义。在其他数据库中,您需要以其他方式进行转义。
推荐阅读
- c# - 如何使用 Web 客户端获得的值迭代公共常量?
- macos - 在 SwiftUI DocumentGroup macOS 中创建并打开一个新文档
- c# - 更改路径标记语法的数据属性的内容?
- python - ScrollBar QStyleSheet 在应该透明时显示为背景
- visual-studio - 将英特尔 Fortran 与 Microsoft Visual Studio 和 ANSYS Autodyn 相连接
- python - discord.py 如何检查文本通道
- amazon-web-services - 在自定义 docker 镜像中安装 Docker
- python - 使用 LSTMcell 自定义 RNN
- postgresql - 将服务器上的数据库与数据库本地计算机同步
- string-matching - 字符串匹配有限自动机预处理时间