У меня есть несколько таблиц, которые выглядят как этотВыбрать счетчики из одной колонки, основанные на разных сроках
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
Но, похоже, он просто подсчитывает все даты в базе данных для всех имен.
Вздох. Я должен был это видеть. Спасибо Matt – maltman
без проблем его легко упускать из виду сделал это сам пару раз, я уверен. другой способ исправить было бы изменить его на SUM (...) и оставить аргумент case так, как он был у вас. Граф хорош, хотя, например, если вы хотите подсчитать идентификаторы DISTINCT, даты и т. Д., Где, как и в SUM, вы не можете выполнить это – Matt