2014-03-25 4 views
0

У меня есть Выберите заявление какКак написать условие в столбце select в sql server?

select AVG(CAST(DATEDIFF(Day,CreatedDate,FirstTouchDate) AS BIGINT) else null end) AS avgdaystofirstattempt, 
     AVG(CAST(DATEDIFF(Day,CreatedDate,Completeddate) AS BIGINT)) AS AvgDaystoComplete 
from Table1 

как я могу записать условие для столбца avgdaystofirstattempt - FirstTouchdate не нравится «% 1900%» в выбрать себя, но не в том, где п.

заранее спасибо

+0

Вы не можете. Условие имеет функцию 'avg()', которая недопустима в предложении 'where'. Это разрешено в предложении 'having'. Вместо того, чтобы просто показывать запрос, который не работает, почему бы не изменить вопрос и не включить образцы данных и желаемые результаты? –

+0

Я думаю, что он пытается сделать это, чтобы выборочно включать только определенные строки в '' avg', а не полностью исключать их из запроса. –

ответ

0

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

SELECT AVG(
      CASE 
       WHEN DATEDIFF(Day,CreatedDate,FirstTouchDate) < 1900 THEN NULL 
       ELSE CAST(DATEDIFF(Day,CreatedDate,FirstTouchDate) AS BIGINT) 
       END 
      ) AS avgdaystofirstattempt, 
     AVG(CAST(DATEDIFF(Day,CreatedDate,Completeddate) AS BIGINT)) AS AvgDaystoComplete 
FROM Table1