SQL 转置字符串/多个未转置的列

SQL Pivot Strings / Multiple Unpivoted Columns

SQL 的新手,需要一些帮助 "pivoting" table。这就是我想要做的...

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 ║         ║
╚═════════════╩══════════╩═════════╩═════════╩═════════╝

回答潜在问题:

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];

只要在 select 子句中没有术语来透视该数据即可满足不包括 Sketchers 数据的要求。

请注意,您没有告诉我们您使用的是哪个数据库。我假设 SQL 服务器,其中可以使用方括号转义带有空格的列名。在其他数据库中,您需要通过其他方式转义。