2017-05-04 4 views
1

の作業に基づいて値を取得するために、私はどのようにシフト

08 3メインシフトを有する:00〜16:00はS1
16:00〜24:00〜08:00 00はS2
が 00 S3

私は上記の3シフトに基づいてすべてのデータを取得する必要があります、今私は3シフトに基づいてすべてのデータを取得するストアドプロシージャを作成しています。以下は

ALTER PROCEDURE sp_shift 
(
    @V2_WORK_DATE DATETIME, 
    @V3_SHIFT_NO VARCHAR(2) 
) 

AS 
    DECLARE @shift VARCHAR(5); 

     select t3.scn,t3.vsl_name, t1.qty, t1.opr_type, t1.hatch_num,t1.opr_st_dt_tm,t1.opr_ed_dt_tm,t1.wght,t1.vol,t2.description,t3.disc_load, 

     case when @V3_SHIFT_NO = 'S1' THEN DATEPART(HH,@V2_WORK_DATE)> = 8 AND DATEPART(HH, @V2_WORK_DATE) <16 
      when @V3_SHIFT_NO = 'S2' THEN DATEPART(HH,@V2_WORK_DATE)> = 16 AND DATEPART(HH, @V2_WORK_DATE) <24 
      when @V3_SHIFT_NO = 'S1' THEN DATEPART(HH,@V2_WORK_DATE)> = 8 AND DATEPART(HH, @V2_WORK_DATE) <16 end as @shift 
     from ccostsitem t1 
     inner join ccoscargotype t2 on t2.code = t1.cg_type_id 
     inner join ccostallysheet t3 on t3.id = t1.master_id 
     where @shift = @V3_SHIFT_NO 

私はこのストアドプロシージャに問題がcase whenあるのparam

EXEC sp_shift '2016-12-30 08:00:00.000','S1' 

でSPをexecしどのように設定したい「incorrect syntax near end

+0

どのcase文と変数の両方SQLで動作します。特定の日付列の時間が特定の範囲内にあるテーブルからデータを取得しようとしていると思います。日付列が何であるかを明確にして、いくつかのサンプルデータを与えることができますか? – ZLK

答えて

0

ことをエンド・プロンプトに近いエラーを示していあなたの変数=はCASEステートメントに、ASは使わないでください。 ASはエイリアスコマンドであり、この場合は列が必要です。これは動作するはずです:

@shift = case when @V3_SHIFT_NO = 'S1' THEN DATEPART(HH,@V2_WORK_DATE)> = 8 AND DATEPART(HH, @V2_WORK_DATE) <16 
       when @V3_SHIFT_NO = 'S2' THEN DATEPART(HH,@V2_WORK_DATE)> = 16 AND DATEPART(HH, @V2_WORK_DATE) <24 
       when @V3_SHIFT_NO = 'S1' THEN DATEPART(HH,@V2_WORK_DATE)> = 8 AND DATEPART(HH, @V2_WORK_DATE) <16 end 

編集:実際には、第二審査の上、お問い合わせは、いくつかの追加の助けを必要とするかもしれませんが、うまくいけば、それはあなたが正しい方向に向かっ取得します。

1

WHENが評価される条件であり、THENが結論です。

SELECT * 
FROM (SELECT t3.scn 
    , t3.vsl_name 
    , t1.qty 
    , t1.opr_type 
    , t1.hatch_num 
    , t1.opr_st_dt_tm 
    , t1.opr_ed_dt_tm 
    , t1.wght 
    , t1.vol 
    , t2.description 
    , t3.disc_load 
    , CASE WHEN DATEPART(HH,@V2_WORK_DATE)> = 8 AND DATEPART(HH, @V2_WORK_DATE) <16 THEN 'S1' 
     WHEN DATEPART(HH,@V2_WORK_DATE)> = 16 AND DATEPART(HH, @V2_WORK_DATE) <24 THEN 'S2' 
     WHEN DATEPART(HH,@V2_WORK_DATE)> = 8 AND DATEPART(HH, @V2_WORK_DATE) <16 THEN 'S3' END AS Shift 
    FROM ccostsitem t1 
    INNER JOIN ccoscargotype t2 on t2.code = t1.cg_type_id 
    INNER JOIN ccostallysheet t3 on t3.id = t1.master_id 
    ) a 
WHERE Shift = @V3_SHIFT_NO 
0

使用しないでください@記号:

から:

end as @shift 

へ:私はあなたがについて少し混乱するかもしれないと思う

end as shift 
関連する問題