SQL-显示按时间范围分组的约会的运行计数
我有一张桌子 TBL指针{ 应用程序ID, 应用程序日期, 用户_ID} 我目前有一个语句,它返回按年份和月份分组的约会数SQL-显示按时间范围分组的约会的运行计数,sql,sql-server,Sql,Sql Server,我有一张桌子 TBL指针{ 应用程序ID, 应用程序日期, 用户_ID} 我目前有一个语句,它返回按年份和月份分组的约会数 SELECT YEAR(App_Date) AS Year, MONTH(App_Date) AS Month, count(*) AS "No of Appointments" FROM tblapplication GROUP BY YEAR(App_Date), MONTH(App_Date)
SELECT
YEAR(App_Date) AS Year,
MONTH(App_Date) AS Month,
count(*) AS "No of Appointments"
FROM
tblapplication
GROUP BY
YEAR(App_Date),
MONTH(App_Date)
我不知道如何写一个select语句来返回标题为{time frame,No of applications}的语句,然后在语句中包含数据
- 第1行:时间范围=迄今为止的一周,应用程序编号=x
- 第2行:时间范围=迄今为止的月份,应用程序编号=y
- ro3 3:时间范围=到目前为止的年份,app-z的编号
如能在正确的方向上给予帮助,我们将不胜感激。实际问题远大于此,但我相信我现在已经将其简化为问题的症结所在。如果您对一行的结果满意,那么这相对简单:
select count(case when datepart(wk, App_Date) = datepart(wk, getdate())
then 1 end) as WeekSofFar
, count(case when datepart(m, App_Date) = datepart(m, getdate())
then 1 end) as MonthSofFar
, count(*) as YearSoFar
from tblApplications
where datepart(y, App_Date) = datepart(y, getdate())
如果必须使用单独的行,请尝试以下操作:
select 'WeekSoFar' as Period
, (
select count(*)
from tblApplications
where datepart(y, App_Date) = datepart(y, getdate())
and datepart(wk, App_Date) = datepart(wk, getdate())
) as NumberOfApps
union all
select 'MonthSoFar'
, (
select count(*)
from tblApplications
where datepart(y, App_Date) = datepart(y, getdate())
and datepart(m, App_Date) = datepart(m, getdate())
)
union all
select 'YearSoFar'
, (
select count(*)
from tblApplications
where datepart(y, App_Date) = datepart(y, getdate())
)
我假设SQL 2008是您没有指定的
SELECT
X.TimePeriod,
Count(
CASE X.Which
WHEN 3 THEN
CASE
WHEN App_Date > DateAdd(Day, -DatePart(Weekday, GetDate()), GetDate())
THEN 1
END
WHEN 2 THEN CASE WHEN Month(App_Date) = Month(GetDate()) THEN 1 END
ELSE 1 END
) [No of Appointments]
FROM
tblApplication
CROSS JOIN (
VALUES (1, 'Year to date'), (2, 'Month to date'), (3, 'Week to date')
) X (Which, TimePeriod)
WHERE
App_Date < Convert(date, GetDate() + 1)
AND App_Date >= DateAdd(Year, DateDiff(Year, '19000101', App_Date), '19000101')
GROUP BY
X.Which,
X.TimePeriod
ORDER BY
X.Which
很抱歉没有使用“YYYYMMDD”,我在打印时没有考虑。这是一个很好的技巧,使用
计数保存5个字符(x时为1结尾)
就像我一直做的那样求和(x时为1结尾)
。
CREATE TABLE tblApplication (
App_Date datetime
)
INSERT tblApplication
VALUES
('2/1/2012'), ('2/5/2012'), ('2/10/2012'), ('1/2/2012'), ('1/9/2012'),
('1/15/2012'), ('1/28/2012'), ('12/1/2012'), ('12/5/2012'), ('12/10/2012'),
('11/2/2012'), ('11/9/2012'), ('11/15/2012'), ('11/28/2012')