2016-11-03 4 views
0

1つの列の前の日付に基づいて別のテーブルからいくつかの列を選択してビューを作成しようとしています。これが正常に動作している、ここに私のコード日の値に基づくSELECTステートメントSQLサーバー

ALTER VIEW [Orders_By_User] 
AS 
(


     SELECT 
     [Userid] 
     ,[Region] 
     ,[Country] 
     ,[Order Number] 
     ,[Order Entry Date] 
     ,[Customer Name] 

     FROM BACKLOG 
     WHERE ([Order Entry Date] >= dateadd(day,datediff(day,1,GETDATE()),0) 
     AND [Order Entry Date] < dateadd(day,datediff(day,0,GETDATE()),0)) 
     AND [Userid] IN ('dzuza', 'tmol', 'jmichal') 

     GROUP BY 
     [Userid] 
     ,[Region] 
     ,[Country] 
     ,[Order Number] 
     ,[Order Entry Date] 
     ,[Customer Name] 
) 

は、私はそれが金曜日からのデータではない日曜日前日を選択して日が月曜日の場合と同じビューに条件を追加したいです。私はこのようにしようとしていた

SELECT 
CASE 
WHEN datename(dw, getdate()) in ('Tuesday','Wednesday','Thursday','Friday') THEN ... 
ELSE ... 

しかし、私はそれを正しく書く方法を知らなかった。私はSELECT CASEを使用して別のSELECTを使用するとエラーが表示されます。

お願いします。どうもありがとうございました。

+0

I 2つのテーブルが表示されない、前の日付は何ですか? 'GETDATE()'?期待される成果は? – sagi

+0

WHERE([Order Entry Date]> = dateadd(日、1、GETDATE())、0) AND [注文入力日] JuniorDev

答えて

2

CASEのためにこれを試してみてください:

WHERE  
    [Order Entry Date] >= dateadd(dd, 
            case 
             when datename(dw, getdate()) = 'Monday' then -3 
             else -1 
            end, 
            cast(getdate() as date)) 
    AND [Order Entry Date] < cast(getdate() as date) 
    AND [Userid] IN ('dzuza', 'tmol', 'jmichal') 
0

あなたのwhere状態に曜日に関するそのロジックを含むことができ、それが大幅に簡略化することができるWHEN

... 
CASE WHEN datename(dw, getdate()) = 'Tuesday' OR 
      datename(dw, getdate()) = 'Wednesday' OR 
      datename(dw, getdate()) = 'Thursday' OR 
      datename(dw, getdate()) = 'Friday' THEN ... 
1

ちょうどor(私を使用dayフィールドの調整が必要)

where [Userid] IN ('dzuza', 'tmol', 'jmichal') 
and 
    (
     (
     datename(dw,getdate()) in ('Tuesday','Wednesday','Thursday','Friday') 
     and [Order Entry Date] = dateadd(d,-1,getdate()) 
    ) 
    or 
     (
     datename(dw,getdate()) = 'Monday' 
     and [Order Entry Date] = dateadd(d,-3,getdate()) 
    ) 
) 
関連する問題