2016-11-21 4 views
0

У меня есть несколько таблиц, которые выглядят как этотВыбрать счетчики из одной колонки, основанные на разных сроках

Table1 
Name varchar 
ID int 

Table2 
ID int 
Run_Date datetime 

Я пытаюсь выбрать имя в одной колонке, а затем подсчетом даты в 2 колонки , 1 будет все даты на имя с прошлой недели, а второй столбец будет считаться с каждого счета на этой неделе. Результаты будут выглядеть что-то вроде этого

Так что, если мои таблицы выглядит следующим образом

Table1 
Name1 1 
Name2 2 
Name3 3 

Table2 
1 2016-11-21 8:40:23.570 
2 2016-11-21 8:50:23.570 
1 2016-11-21 9:40:23.570 
1 2016-11-21 10:40:23.570 
1 2016-11-16 10:40:23.570 
2 2016-11-16 10:40:23.570 
3 2016-11-21 8:40:23.570 

Мои результаты будут выглядеть как

Name  This_Week  Last_week 
Name1  3    1 
Name2  1    1 
Name3  1    0 

я могу получить значения отдельно, делая

WHERE DATEPART(wk, Run_Date) = DATEPART(wk, GETDATE()) AND DATEPART(yy, Run_Date) = DATEPART(yy, GETDATE()) 

Я просто добавляю -1 после недели, чтобы получить все с прошлой недели. Как я могу заставить их появляться бок о бок в одной таблице?

Я пытался делать СЛУЧАЙ

COUNT(CASE WHEN DATEPART(wk, Run_DATE) = DATEPART(wk, GETDATE()) AND DATEPART(yy, Run_Date) = DATEPART(yy, GETDATE()) THEN 1 ELSE 0 END) AS This_Week 

Но, похоже, он просто подсчитывает все даты в базе данных для всех имен.

ответ

3
COUNT(CASE WHEN DATEPART(wk, Run_DATE) = DATEPART(wk, GETDATE()) AND DATEPART(yy, Run_Date) = DATEPART(yy, GETDATE()) THEN 1 END) AS This_Week 

Извлечь ELSE 0.

COUNT проигнорирует NULLs, но ELSE 0 присвоит значение. выведение его вообще будет означать, что он не будет учитывать сторону заявления ELSE.

+1

Вздох. Я должен был это видеть. Спасибо Matt – maltman

+0

без проблем его легко упускать из виду сделал это сам пару раз, я уверен. другой способ исправить было бы изменить его на SUM (...) и оставить аргумент case так, как он был у вас. Граф хорош, хотя, например, если вы хотите подсчитать идентификаторы DISTINCT, даты и т. Д., Где, как и в SUM, вы не можете выполнить это – Matt