Нужна помощь с преобразованием структуры таблицы SQL - PullRequest
1 голос
/ 08 марта 2010

Мне нужно выполнить обновление / вставку, одновременно меняя структуру входящих данных.

Подумайте о магазинах, в которых определено рабочее время для каждого дня недели.

Надеюсь, это может лучше объяснить, чего я пытаюсь достичь:

worktimeOrigin table:

столбцы:

  • shop_id
  • день
  • VAL

данные:

shop_id  |  day        |  val
------------------------------
123      | "monday"    | "9:00 AM - 18:00"
123      | "tuesday"   | "9:00 AM - 18:00"  
123      | "wednesday" | "9:00 AM - 18:00"

магазинный стол :

столбцы:

  • ID
  • worktimeDestination.id

worktimeDestination table :

столбцы:

  • ID
  • 1052 * вторник *
  • 1054 * среда *

Моя цель:

Я хотел бы вставить данные из таблицы worktimeOrigin в worktimeDestination и указать соответствующее рабочее времяDestination для магазина.

данные таблицы магазина:

  • 123
  • 1 (обновлено)

worktimeДанные таблицы назначения:

id  |  monday           |  tuesday          |  wednesday 
---------------------------------------------------------------------------
1   | "9:00 AM - 18:00" | "9:00 AM - 18:00" | "9:00 AM - 18:00" (inserted)

Есть идеи, как это сделать?

1 Ответ

2 голосов
/ 08 марта 2010

Вы можете использовать PIVOT, например,

;WITH x AS
(
    SELECT 
        ShopID,
        [Monday] = [2],
        [Tuesday] = [3],
        [Wednesday] = [4]
    FROM
    (
        SELECT
            ShopID,
            DW = CASE [Day]
                WHEN 'Monday' THEN 2
                WHEN 'Tuesday' THEN 3
                WHEN 'Wednesday' THEN 4
            END,
            val
        FROM
            dbo.WorkTimeOrigin
        -- WHERE ShopID = 123 or @param
    ) AS d
    PIVOT
    (
        MAX(val)
        FOR DW IN ([2],[3],[4])
    ) AS p
)
/*
INSERT dbo.WorkTimeDestination
(
    id,
    Monday,
    Tuesday,
    Wednesday
)
*/
SELECT 
    s.[WorkTimeDestination.ID],
    [Monday],
    [Tuesday],
    [Wednesday]
FROM x
INNER JOIN dbo.Shop AS s
ON x.ShopID = s.id;

Раскомментируйте часть INSERT, когда вы удовлетворены результатами. Обратите внимание, что не все три строки обязательно будут существовать, поэтому вы можете получить NULL для одного или нескольких значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...