我在数据库中有两个表首先是以下内容: 第一张表是EMPSHIFT
EmployeeID 01/04/2017 02/04/2017 03/04/2017 04/04/2017 to 30/04/2017 -------------------------------------------------------------------------------- 1 7,6 2 3 4 to end of all employees
第二张表是SCHEDULEEMPLOYEES
EmployeeID DayDate Shift ------------------------------------ 1 01/04/2017 7,6 1 02/04/2017 5,2 1 03/04/2017 7,6 1 04/04/2017 9 2 01/04/2017 9 2 02/04/2017 3,2 3 01/04/2017 7,6 3 03/04/2017 9 to the end of table data
我希望make PL-SQL存储过程或SQL语句从第二个更新第一个表数据,以便在特定列日期设置移位数据 EmployeeID = 1他在2017年1月1日的班次= 7,6
我到现在为止尝试的是以下内容 What I tried till now但不起作用可以提供任何帮助
答案 0 :(得分:0)
在这种情况下,您应该使用MERGE语句,如下所示:
DECLARE
l_date DATE:=TO_DATE('01/04/2017','DD/MM/YYYY');
BEGIN
LOOP
EXECUTE IMMEDIATE 'MERGE INTO EMPSHIFT E
USING SCHEDULEEMPLOYEES S
ON (S.EMPLOYEEID=E.EMPLOYEEID AND S.DAYDATE=TO_DATE('''||TO_CHAR(l_date)||''',''DD/MM/YYYY''))
WHEN MATCHED
THEN UPDATE SET E."'||TO_CHAR(l_date)||'"=S.SHIFT';
l_date:=l_date+1;
EXIT
WHEN l_date>TO_DATE('30/04/2017','DD/MM/YYYY');
END LOOP;
END;
您提到要更新记录,但如果您想插入缺失的记录(对于EMPSHIFT表中缺少的EMPLOYEEID),请参阅merge_insert_clause
答案 1 :(得分:0)
或者你在谈论pivot / unpivot(它存在于Oracle 11g中)
SELECT *
FROM (SELECT DayDate,
EmployeeID,
SUM(Shift) shift
FROM SCHEDULEEMPLOYEES
GROUP BY DayDate,
EmployeeID)
PIVOT(SUM(shift)
FOR DayDate IN(to_date('01/04/2017',
'mm/dd/yyyy'),
to_date('02/04/2017',
'mm/dd/yyyy'),
to_date('03/04/2017',
'mm/dd/yyyy'),
to_date('04/04/2017',
'mm/dd/yyyy')));