2016-05-20 4 views
2

Я пытаюсь написать заявление о ситуации в моем разделе where. Ниже мой запрос. Я хочу выполнить запрос в зависимости от дня недели. В принципе, если в понедельник он должен быть установлен с датой = getdate() - 3 , если в его вторник он должен быть датой набора даты, созданной между getdate() - 3 и getdate() - 1 , если ее wed-friday, то она должна быть установлена ​​дата = getdate() - 1case case в зависимости от дня недели внутри, где статья

SELECT Count(dispute_reference_no)AS reg_inc 
FROM mytable 
WHERE reasoncd IN ('b2', 'b3') 
AND datecreated = ( 
     CASE 
      WHEN Datename(weekday,Getdate()) = 'Monday' THEN dbo.Fn_getdateonly(Getdate()-3)) 
      WHEN datename(weekday,getdate()) = 'tuesday' THEN (dbo.fn_getdateonly(getdate()-3) 
AND dbo.fn_getdateonly(getdate())) 
ELSE dbo.fn_getdateonly(getdate()-1) 
END) 

приведенный выше код не работает. Это не позволит мне добавить диапазон в case case.

+1

очень трудно понять, что вы хотите, но ваши Скобки находятся на неправильные места –

+0

Правильный способ использования 'CASE' -' CASE WHEN ... WHEN ... END 'Ваш END не связан с' Case' – demo

+0

Забудьте об ошибке. Что вы имеете в виду: «нужно создать дату с датой». Вы не можете создать диапазон на 'CASE' и сравнить с одним значением –

ответ

1

Вы не можете динамически переписать статью where, как это, но вы могли бы получить желаемое поведение, используя ряд логических операторов:

SELECT COUNT(Dispute_Reference_no) AS reg_inc 
FROM mytable 
WHERE reasoncd in ('b2', 'b3') AND 
     ((DATENAME(weekday, GETDATE()) = 'monday' AND 
     datecreated = dbo.fn_getdateonly(GETDATE()-3)) OR 
     (DATENAME(weekday, GETDATE()) = 'tuesday' AND 
     datecreated BETWEEN dbo.fn_getdateonly(GETDATE()-3) AND 
          dbo.fn_getdateonly(GETDATE())) OR 
     (atecreated = dbo.fn_getdateonly(GETDATE()-1) 
     ) 
Смежные вопросы