SQL INSERT Несколько записей в новую таблицу из 1 записи в существующей таблице с вычисленными столбцами
У меня есть следующие данные в качестве примера:
EMP NR Date Hours1 Hours2 Hours3 Hours4 Dep Man
1234 16/06/2014 9.5 3 0 0 13 2
1235 16/06/2014 9.5 8 2 8 12 6
1236 16/06/2014 9.5 0 0 0 11 2
Затем мне нужно добавить данные в новую таблицу, которая просматривает первую запись в первой таблице, а для столбцов Hours1, Hours2, Hours3 и Hours 4 добавляет новую запись в новую таблицу Hours для каждого столбца, а также Расчетное значение для какого столбца он пришел. Если значение какого-либо из столбцов Hours равно 0, его следует игнорировать.
EMP NR HRS Cat Hours Dep Man
1234 1 9.5 13 2
1234 2 3 13 2
1235 1 9.5 12 6
1235 2 8 12 6
1235 3 2 12 6
1235 4 8 12 6
1236 1 9.5 11 2
Так что в некоторых случаях во 2-й таблице есть несколько записей для одной записи в первой таблице.
Если кто-нибудь знает, как это можно сделать в SQL с помощью хранимой процедуры или даже оператора select, я был бы очень признателен.
Моя идея о том, как это сделать, состоит в том, чтобы написать хранимую процедуру, которая выбирает существующие данные и с помощью цикла while выполняет необходимые вычисления, а затем добавляет данные в новую таблицу. Я просто застрял на том, как это сделать.
3 ответа
Вы должны быть в состоянии сделать это в одном UNION, указав HRS Cat
постоянная в каждой части:
select "EMP NR", 1 as "HRS Cat", Hours1 as Hours, Dep, Man
from Table1
where Hours1 <> 0
union all
select "EMP NR", 2 as "HRS Cat", Hours2 as Hours, Dep, Man
from Table1
where Hours2 <> 0
union all
select "EMP NR", 3 as "HRS Cat", Hours3 as Hours, Dep, Man
from Table1
where Hours3 <> 0
union all
select "EMP NR", 4 as "HRS Cat", Hours4 as Hours, Dep, Man
from Table1
where Hours4 <> 0
Возможно, я чего-то упускаю, потому что вы упоминаете "расчеты", а здесь их нет.
Как насчет 4 разных вариантов?SELECT EMP_NR, Hours1 INTO new_table FROM orig_table WHERE Hours1 <> 0
SELECT EMP_NR, Hours2 INTO new_table FROM orig_table WHERE Hours1 <> 0
так далее...
Ниже приведенный запрос вставки, вероятно, поможет вам:
INSERT INTO TABLE2 (EMP_NR, HRS_CAT, HOURS, DEP, MAN)
SELECT EMP_NR, 1 HRS_CAT, HOURS1 AS HOURS, DEP, MAN
FROM TABLE1
WHERE HOURS1 <> 0
UNION ALL
SELECT EMP_NR, 2 HRS_CAT, HOURS2 AS HOURS, DEP, MAN
FROM TABLE1
WHERE HOURS2 <> 0
UNION ALL
SELECT EMP_NR, 3 HRS_CAT, HOURS3 AS HOURS, DEP, MAN
FROM TABLE1
WHERE HOURS3 <> 0
UNION ALL
SELECT EMP_NR, 4 HRS_CAT, HOURS4 AS HOURS, DEP, MAN
FROM TABLE1
WHERE HOURS4 <> 0;
Синтаксис
INSERT INTO table_name
(column_name(s))
SELECT column_name(s)
FROM table1;