我有以下数据作为例子:
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
所以在某些情况下,第一个表中的一个条目在第二个表中有多个条目。
如果有人知道如何在SQL中使用存储过程或甚至选择语句来完成这一点,我将非常感激。
我对如何做到这一点的想法是编写一个存储过程,选择现有的数据,并与while循环执行所需的计算,然后将数据添加到新表,我只是卡住了如何做到这一点
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
等等…
您应该能够在单个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
我可能遗漏了一些东西,因为你提到了"计算",而这里没有。
下面的插入查询可能会对您有所帮助:
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;