我有2张表,其中包含以下类型的数据。
Shift
(shiftcode varchar2(10)
)
shiftcode
A
B
C
emp_dt
(sn number(10), empno number(10), dt date
)
SN Empno Date
1 157 01/01/2016
2 157 02/01/2016
3 157 03/01/2016
4 157 04/01/2016
5 157 05/01/2016
6 157 06/01/2016
7 157 07/01/2016
8 157 08/01/2016
9 157 09/01/2016
10 157 10/01/2016
11 157 11/01/2016
12 157 12/01/2016
在这里,我需要通过轮换代码的轮换来映射每个员工。
如果员工班次以B开头,那么它必须像B,A,C,A,B,C ......那样旋转......
我们正在使用toad进行开发。通过使用sql或pl / sql我需要得到我的结果。
我的结果应该是
SN Emp No Date Shift Code
1 157 01/01/2016 B
2 157 02/01/2016 C
3 157 03/01/2016 A
4 157 04/01/2016 B
5 157 05/01/2016 C
6 157 06/01/2016 A
7 157 07/01/2016 B
8 157 08/01/2016 C
9 157 09/01/2016 A
10 157 10/01/2016 B
11 157 11/01/2016 C
12 157 12/01/2016 A
答案 0 :(得分:1)
您可以使用SN列的模数来指定移位代码。
(在这种情况下使用数字更容易,所以考虑移位代码A = 0,B = 1,C = 2)
select SN,empno,dt, mod((SN-1),3) shift_no
from emp_dt
对于模数,我使用了SN-1,因此第一个记录(SN = 1)的结果与移位代码A相对应。
结果应该是这样的:
SN Emp No Date shift_no
1 157 01/01/2016 0 // A
2 157 02/01/2016 1 // B
3 157 03/01/2016 2 // C
如果在emp_dt表中为初始移位代码添加一列,则只需将其添加到模数
select SN,empno,dt, mod((SN-1)+init_shiftcode,3) shift_no
from emp_dt
对于具有init_shiftcode 1(=班次代码B)的员工,结果将是:
SN Emp No Date shift_no
1 157 01/01/2016 1 // B
2 157 02/01/2016 2 // C
3 157 03/01/2016 0 // A
...
答案 1 :(得分:0)
尝试以下。您仍然需要加入班次代码表。
SELECT DISTINCT SN
,EmpNO
,convert(DATE, DATE) dt
,CASE
WHEN DATENAME(dw, DATE) = 'Monday'
THEN 'B'
WHEN DATENAME(dw, DATE) = 'Tuesday'
THEN 'C'
WHEN DATENAME(dw, DATE) = 'Wednesday'
THEN 'A'
WHEN DATENAME(dw, DATE) = 'Thursday'
THEN 'B'
WHEN DATENAME(dw, DATE) = 'Friday'
THEN 'C'
WHEN DATENAME(dw, DATE) = 'Saturday'
THEN 'A'
WHEN DATENAME(dw, DATE) = 'Sunday'
THEN 'B'
END
FROM emp_dt