2016-03-24 7 views
0

私は以下の種類のデータを持つ2つのテーブルがあります。sqlを使用して私は以下の結果を得る必要があります

Shiftshiftcode varchar2(10)

shiftcode 
A 
B 
C 

emp_dtsn 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 

は、ここで私はshiftcodeの回転に各従業員をマップする必要があります。

従業員のシフトがBで始まる場合、それはB、A、C、A、B、C、のように回転している...

我々は、我々の開発のためのヒキガエルを使用しています。 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 
+4

SOあなたが得たものたちを示し、コードの書き込みサービスではない、とあなた – HoneyBadger

答えて

1

シフトコードを割り当てるには、SN列の係数を使用できます。

(番号での作業は、この場合には容易であるので、シフトコードA = 0、B = 1、C = 2考える)のための結果ように、私はSN-1を使用率について

select SN,empno,dt, mod((SN-1),3) shift_no 
from emp_dt 

あなたは、単純に追加することができます初期shiftcodeためemp_dtテーブルに列を追加する場合

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 

:結果はこのようなものでなければなりません

(SN = 1)最初のレコードは、シフトコードA.に対応しますこのモジュラスinit_shiftcode 1(=シフトコードB)と従業員の

select SN,empno,dt, mod((SN-1)+init_shiftcode,3) shift_no 
from emp_dt 

に結果は次のようになります。

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 
... 
+0

このロジックは私にとっては完璧に機能しました。 – Sunitha

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 
関連する問題