Объединить данные из нескольких исходных таблиц в одну таблицу назначения - PullRequest
1 голос
/ 03 февраля 2012

Я пытаюсь написать хранимую процедуру, которая преобразует содержимое одной таблицы в другую, однако я понятия не имею, с чего начать.В моем сценарии у меня есть 4 таблицы: [Source], [Type_A], [Type_B] & [Destination].

[Source] имеет 2 столбца, значения которых необходимо перенести в [Destination].Один из столбцов в [Source] - это «тип» (дискриминатор).

Если «тип» равен 0, тогда мне нужно извлечь подмножество столбцов из [Type_A] и добавить запись в [Destination] с некоторыми добавленными статическими значениями.

Если «тип» равен 1, то мне нужно извлечь подмножество столбцов из [Type_B] и добавить запись в [Destination] с некоторыми различными добавлены статические значения.

При выполнении этой хранимой процедуры будет обрабатываться переменное количество записей, которое будет вызываться пользователем из приложения ASP.NET.

Я относительныйновичок в SQL, так что простите, если решение простое.Я знаю, что я могу сделать это итеративно в коде (C #), но я бы предпочел избежать накладных расходов на несколько вызовов БД и хотел бы, чтобы все это было заключено в транзакцию.

Если кто-то может пролить свет на то, какЯ мог бы сделать это, я был бы очень признателен.

Спасибо!

1 Ответ

2 голосов
/ 03 февраля 2012

Предполагая, что у вас есть отношения между Source, Type_A и Type_B:

INSERT INTO Destination
    (Col1, Col2, Col3, Col4, Col5)
    SELECT s.Col1, 
           s.type, 
           /* The next two columns illustrate choosing a  */
           /* subset from either Type_A or Type_B         */
           COALESCE(a.Col3, b.Col3),
           COALESCE(a.Col4, b.Col4),
           /* The next column illustrates choosing a      */
           /* static value based on Source.type           */
           CASE WHEN s.type = 0 THEN 'Static Value 1'
                WHEN s.type = 1 THEN 'Static Value 2'
                ELSE NULL
           END /* CASE */
        FROM Source s
            LEFT JOIN Type_A a
                ON s.Col1 = a.Col1
                    AND s.type = 0
            LEFT JOIN Type_B b 
                ON s.Col1 = b.Col1
                    AND s.type = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...