Складирование данных столбца в запросе Excel SQL - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь получить данные из базы данных доступа в таблицу Excel с помощью запроса SQL.Проблема в том, что в моей базе данных доступа есть столбцы с похожими данными, которые я хочу объединить в один столбец.Это должно дать мне дубликаты данных в других столбцах для каждой записи.Я не очень хорошо разбираюсь в SQL, но думаю, что у меня есть основы.

Структура базы данных, которая у меня есть:

Date | Product | Hours 1 | Reason 1 | Hours 2 | Reason 2 |
2019    A          3         "xxx"      5         "yyy"

Таблица Excel, которую я хочу:

Date | Product | Hours | Reason |
2019     A         3      "xxx"      
2019     A         5      "yyy"

Также не уверен, если это возможно, но было бы здорово увидеть исходный столбец каждого

Date | Product | Hours | Reason |  Source  |
2019     A         3      "xxx"   "Hours 1"
2019     A         5      "yyy"   "Hours 2"

Я попробовал UNION ALL и получил дубликаты данных, но не слил их в один столбец.Я собираюсь попробовать INSERT INTO, но вроде как потерял, как поместить каждый в один и тот же столбец

Ответы [ 2 ]

0 голосов
/ 29 мая 2019
  1. Похоже, у вас неверная структура данных в таблице.Под этим я подразумеваю «плоскую» таблицу с несколькими часами в одной строке для записи.Обычно это PITA, когда речь идет о выполнении задач для просмотра данных во многих ситуациях.Обычно это таблица, в которой записи регистрируются отдельно для каждого часа.Я понимаю, что вы, вероятно, не создавали его, но его стоит указать для вашей собственной информации.

  2. По сути, этот вопрос будет легче решить, если вы поймете, как эта нежелательная структура влияет натвоя задачаПо сути, это, на мой взгляд, основная проблема.PIVOT в SQL по сути переключает строки и столбцы.Могут быть способы для поворота данных с помощью кода - выберите ваш любимый - большинство людей на самом деле используют функцию PIVOT, где я склонен балансировать между CTE (общие таблицы) и PIVOT.ИМО CTE легче читать, когда вы их понимаете.Поскольку Acess SQL не поддерживает PIVOT или CTE, нам просто нужно было обработать основную часть того, чем бы был cte, как коррелированный подзапрос.

    SELECT x.* 
    FROM 
    (
        SELECT 
            Date,
            Product,
            Hours,
            Reason,
            [Hours 1] AS Source
        FROM yourTableName
        UNION
        SELECT 
            Date,
            Product,
            Hours,
            Reason,
            [Hours 2] AS Source
        FROM yourTableName
    ) x
    
0 голосов
/ 29 мая 2019

Попробуйте это

SELECT Date, Product, Hours, Reason, Source
  FROM ( 
SELECT Date, Product, Hours1 Hours, Reason1 Reason, "Hours 1" Source
  FROM Table
UNION
SELECT Date, Product, Hours2, Reason2, "Hours 2"
  FROM Table
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...