SQL INSERT从具有计算colmns的现有表中的1条记录中将多条记录到新表中

时间:2014-06-16 13:48:33

标签: sql function insert while-loop calculated-field

我将以下数据作为示例:

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列将新记录添加到每个列的新表中。以及它来自哪个列的计算值。如果任何“小时”列的值为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

因此,在某些情况下,第二个表中有多个条目用于第一个表中的单个条目。

如果有人知道如何使用存储过程甚至是select语句在SQL中完成此操作,我将非常感激。

我对如何做到这一点的想法是编写一个选择现有数据的存储过程,并使用while循环执行所需的计算,然后将数据添加到新表中,我只是坚持如何这样做。

3 个答案:

答案 0 :(得分: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 等...

答案 1 :(得分:0)

您应该能够在单个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

我可能会遗漏一些东西,因为你提到“计算”而这里没有。

答案 2 :(得分: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;