2016-11-03 2 views
0

Ich versuche, eine Ansicht zu erstellen, indem Sie einige Spalten aus einer anderen Tabelle basierend auf einem vorherigen Datum in einer Spalte auswählen. Dies funktioniert gut, hier ist mein CodeSELECT-Anweisung basierend auf einem Tag Wert SQL SERVER

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] 
) 

ich einen Zustand in der gleichen Ansicht hinzufügen mag, dass, wenn der Tag ist Montag, so dass es die Daten von Freitag am Vortag nicht auswählt, den Sonntag. Ich habe versucht, es so zu machen

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

Aber ich wusste nicht, wie man es richtig schreibt. Es zeigt mir einen Fehler, wenn ich SELECT CASE und dann einen anderen SELECT benutze.

Irgendwelche Vorschläge bitte? Vielen Dank.

+0

I sehe nicht zwei Tabellen, was ist das vorherige Datum? 'GETDATE()'? Was ist Ihre erwartete Leistung? – sagi

+0

WHERE ([Auftragseintragsdatum]> = dateadd (Tag, datediff (Tag, 1, GETDATE()), 0) AND [Auftragseintragsdatum] JuniorDev

Antwort

2

Sie diese Logik Woche Tage über umfassen kann in Ihre where Zustand, und es kann deutlich vereinfacht werden:

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

Versuchen Sie dies für den Fall, wenn

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

einfach eine or verwenden (mein muss für Ihre day Feld anpassen)

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()) 
    ) 
) 
Verwandte Themen