用于按月计算计数的 SQL 查询

标签 sql sql-server

将一列中的 1-12 连接到一组按月计数的好方法是什么?...在​​ SQL 中

SELECT
    months???,
    count(whatever1) count1,
    count(whatever2) count2
FROM
    months????
    LEFT JOIN whatever1 ON
        month(whatever1.Date) = months???.monthid
    LEFT JOIN whatever2 ON
        month(whatever2.Date) = months???.monthid
GROUP BY
    months???

最终会是这样的事情

"month","whatever1count","whatever2count"
1,null,5
2,null,3
3,null,null
4,2,3
5,36,73
6,2,null
7,45,944
8,null,12
9,1467,3
10,null,2
11,3,25
12,4,null

编辑-基本上哪里有一种巧妙的方法来获取我的月份列表/表格/其他内容

最佳答案

有很多方法......在上一份工作中,对我来说在许多应用程序中都有效的一个方法是构建一个时间表。

id - Year - Month   - StartStamp            - End Stamp  
1  - 2008 - January - 1/1/2008 00:00:00.000 - 1/31/2008 23:59:59.999

然后,您可以加入日期字段位于 startstamp 和 endstamp 之间的时间范围表。

这使得提取某个时间段或所有时间段变得很容易......

您的记录可以更简单,只需 12 条记录(即 1 - 1 月)并加入 DATEPART(m,DateColumn)

select mon.monthNumber, mon.monthName, 
       count(a.*) as count1, count(b.*) as count2
from months mon
left join whatever1 a on DATEPART(m,a.Date) = mon.monthNumber
left join whatever2 b on DATEPART(m,b.Date) = mon.monthNumber
group by mon.monthNumber, mon.monthName

您也可以临时执行月份操作,如下所示:

select mon.monthNumber, mon.monthName, 
       count(a.*) as count1, count(b.*) as count2
from (
   select 1 as monthNumber, 'January' as monthName
   union
   select 2 as monthNumber, 'February' as monthName
   union
   select 3 as monthNumber, 'March' as monthName
   union
   ......etc.....
) mon
left join whatever1 a on DATEPART(m,a.Date) = mon.monthNumber
left join whatever2 b on DATEPART(m,b.Date) = mon.monthNumber
group by mon.monthNumber, mon.monthName

关于用于按月计算计数的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6115945/

相关文章:

sql-server - 将全名解析为单独的列名称字段

sql-server - 操作 XML 命名空间

sql-server - SQL Server Management Studio - 在表列表中使用多个过滤器?

sql - 在更新记录时锁定记录的最佳方法是什么?

MySQL查询获取国家代码

SQL 查询包含 IF/ELSE 语句

包括 SP 调用的 SQL Select 语句有语法错误

c# - 从查询中检索单个值

PHP 与 SQL Server 2005+

mysql - 根据 MySql 中具有最小和最大日期的记录选择差异