Сводные строки SQL / несколько неотключенных столбцов - PullRequest
0 голосов
/ 25 апреля 2018

Новичок в 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.

Впервые в переполнении стека, поэтому, пожалуйста, дайте мне знать, если я смогу что-то уточнить. Спасибо!

1 Ответ

0 голосов
/ 25 апреля 2018

Я думаю, что вам просто нужен стандартный сводный запрос здесь:

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, где имена столбцов с пробелами можно экранировать с помощью квадратных скобок.В других базах данных вам нужно будет сбежать другими способами.

...