Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-显示按时间范围分组的约会的运行计数_Sql_Sql Server - Fatal编程技术网

SQL-显示按时间范围分组的约会的运行计数

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)

我有一张桌子

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语句来返回标题为{time frame,No of applications}的语句,然后在语句中包含数据

  • 第1行:时间范围=迄今为止的一周,应用程序编号=x
  • 第2行:时间范围=迄今为止的月份,应用程序编号=y
  • ro3 3:时间范围=到目前为止的年份,app-z的编号
我想知道一个人有多少约会。本周,2。当月。3.当前年度,并将每个结果都放在自己的行中


如能在正确的方向上给予帮助,我们将不胜感激。实际问题远大于此,但我相信我现在已经将其简化为问题的症结所在。

如果您对一行的结果满意,那么这相对简单:

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')