当前位置: 首页 > 知识库问答 >
问题:

mssql中按天计数字段

宰父嘉胜
2023-03-14

我有一个包含调度插槽的表,称为:
ScheduleSlots

字段:
id(int)
scheduleID(int)
time(datetime)
availableslots(int)
CalendarGroupID(int)
Level(int)
enabled(bit)


我想要设置一个gridview,在其中获取所有日期并计算每天的已启用和已禁用日期。


我不确定如何编写sql语句来执行此操作。

即。

日期启用已禁用
3/31/2021 20 20
4/1/2021 10 30


SELECT Time, scheduleID,
(SELECT COUNT(Enabled) FROM [dbo].[ScheduleSlots] 
WHERE Cast(Time as Date)>='2021-03-31' AND Cast(Time as Date)<='2021-04-01' AND CalendarGroupID=1 AND Level=1 AND Enabled=1) as Enabled, 
(SELECT COUNT(Enabled) FROM [dbo].[ScheduleSlots] 
WHERE Cast(Time as Date)>='2021-03-31' AND Cast(Time as Date)<='2021-04-01' AND CalendarGroupID=1 AND Level=1 AND Enabled=0) as Disabled
FROM [dbo].[ScheduleSlots] 
WHERE Cast(Time as Date)>='2021-03-31' AND Cast(Time as Date)<='2021-04-01' AND CalendarGroupID=1 AND Level=1
GROUP BY scheduleID, Time

共有2个答案

长孙星汉
2023-03-14

这是一个简单的分组查询:

SELECT 
  CONVERT(DATE, "Time") AS "Date", 
  SUM(CONVERT(INT, "Enabled")) AS "Enabled",
  COUNT() - SUM(CONVERT(INT, "Enabled")) AS "Disabled"
FROM "dbo"."ScheduleSlots"
WHERE "CalendarGroupID" = 1 
  AND "Level" = 1
GROUP BY CONVERT(DATE, "Time")
胡昊
2023-03-14

你可以在没有内部选择的情况下做到这一点:

SELECT [Time],
    SUM([Enabled]) as [Enabled], 
    SUM([Disabled]) as [Disabled]
FROM [dbo].[ScheduleSlots] 
WHERE 
    [Time]>='2021-03-31' 
    AND [Time]<='2021-04-01'
    AND CalendarGroupID=1 
    AND Level=1
GROUP BY Cast([Time] as Date)
 类似资料:
  • 问题内容: 我在SQL Server中有一个日志表,看起来像这样: 我想要的是一个结果列表,该列表表示每天处理了多少种不同的退款,并抛出了所有NULL。 我需要编写什么SQL才能产生这些结果? 问题答案: 我喜欢(MS SQL)中的这种方法:

  • 问题内容: 我将此数据插入了Elasticsearch: 旁注:重现: 1)下载:http://wmo.co/20160928_es_query/bulk.json 2)执行:卷曲-s -XPOST ‘ 的http://本地主机:9200 /测试/外部/ _bulk漂亮 ‘ -数据二进制@ bulk.json 问题: 获取每个“位置”有多少记录的计数。 解决方案1:存储桶聚合..没有得到期望的结果

  • 问题内容: 一个菜鸟问题! 我写了这个查询,但是“分组依据”非常愚蠢……所以,我该如何纠正呢? 欢迎提供不同的解决方案和有关性能的信息(也许使用DISTINCT?) 提前致谢! 问题答案: 这应该和其他选项一样好- 如果您想一次只对一个字母运行此查询,则可以添加WHERE子句并删除GROUP BY-

  • 问题内容: 给定一个包含这样数据的文件(即stores.dat文件) 什么命令返回每行出现“ t”字符的次数? 例如。会返回: 另外,要按字段计数出现次数,返回以下结果的命令是什么? 例如。输入第2列和字符“ t” 例如。输入第3列和字符“ t” 问题答案: 要计算每行字符的出现次数,您可以执行以下操作: 要计算每个字段/列中字符的出现次数,您可以执行以下操作: 第2栏: 第3栏: 函数的返回值是

  • 问题内容: 我试图计算两个日期之间的差额,但我注意到一件事。仅计算日期时,间隔中包括夏令时的开始,因此结果将缩短1天。 为了获得准确的结果,还必须考虑小时数。 例如: 输出: 有人有更好的解决方案吗? 问题答案: 哦,是的,有更好的解决方案! 停止使用过时的类,并使用Java 8及更高版本(教程)中内置的java.time API的功能 。具体而言,,,和类。