Sql 查询以选择该月份以及该月份的周末和公共假日的数量

Sql 查询以选择该月份以及该月份的周末和公共假日的数量,sql,tsql,sql-server-2005,Sql,Tsql,Sql Server 2005,我的数据库表Holiday包括ad Holidaydate->datetime、WEKENDHOLIDAY->bit、PublicHoliday->bit字段 我想要一个特定月份的星期日和公共假日的数量 我的表格值如下(示例) 所以现在输出应该是这样的: year Month count(weekend) count(public) ---- ----- -------------- ------------- 2012 April 2

我的数据库表Holiday包括ad Holidaydate->datetime、WEKENDHOLIDAY->bit、PublicHoliday->bit字段 我想要一个特定月份的星期日和公共假日的数量

我的表格值如下(示例)

所以现在输出应该是这样的:

year      Month   count(weekend)   count(public)
----      -----   --------------   -------------
2012      April      2               0
2012      May        1               1
2013      April      0               1

我强烈建议使用a进行此类查询。

我强烈建议使用a进行此类查询

     SELECT year(holidaydate),month(holidaydate), 
            sum(case Weekend when true then 1 else 0 end) wkEnd, 
            sum(case PublicHoliday when true then 1 else 0 end) pubHol
      FROM Holiday 
      GROUP BY year(holidaydate),month(holidaydate)
我没有可用的SQL server。这是在mysql上测试的。这里的年和月是返回日期的年和月的函数。整个数据库中的大小写语法应该相同


我没有可用的SQL server。这是在mysql上测试的。这里的年和月是返回日期的年和月的函数。整个数据库中的大小写语法应该相同。

以下是一种方法,您可以使用它来保存数据:

WITH partitioned AS (
  SELECT
    MonthDate = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0),
    WeekendHoliday,
    PublicHoliday
  FROM Holiday
)
SELECT
  Year           = YEAR(MonthDate),
  Month          = DATENAME(MONTH, MonthDate),
  Weekends       = COUNT(NULLIF(WeekendHoliday, 'false')),
  PublicHolidays = COUNT(NULLIF(PublicHoliday , 'false'))
FROM partitioned
GROUP BY
  MonthDate

使用同一个月的第一个进行分区,然后将该值用于and from。每个将每个
'false'
0
)值转换为
NULL
,因此相应的值会忽略它。因此,只计算
'true'
1
)值。

以下是一种方法,您可以使用它来计算数据:

WITH partitioned AS (
  SELECT
    MonthDate = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0),
    WeekendHoliday,
    PublicHoliday
  FROM Holiday
)
SELECT
  Year           = YEAR(MonthDate),
  Month          = DATENAME(MONTH, MonthDate),
  Weekends       = COUNT(NULLIF(WeekendHoliday, 'false')),
  PublicHolidays = COUNT(NULLIF(PublicHoliday , 'false'))
FROM partitioned
GROUP BY
  MonthDate

使用同一个月的第一个进行分区,然后将该值用于and from。每个将每个
'false'
0
)值转换为
NULL
,因此相应的值会忽略它。因此,只计算
'true'
1
)值。

您需要在这个问题中了解更多详细信息。你想要的输出中的3和5代表什么,一些东西的计数,如果是,是什么?请再解释一下。根据您的问题
选择“四月”作为月份,选择“3”作为周末,选择“5”作为公共假日
将满足此问题。Ya 3表示4月份的周末假日数,5表示4月份的公共假日数。如果周末(字段)的值为真,则不计算,如果公共假日的值为真(现场)是真的,那么算一下……SQL Server中没有
boolean
数据类型,您的意思是
bit
?并且您对3和5的评论与您显示的数据完全不匹配,例如,您说3是4月份的周末假期数,但您的数据显示只有2个。您需要更精确地解释您的逻辑。以下哪一个是e你展示的两个结果集你真的想要吗?第一个有3列,第二个有4列?或者两者都想要?在这个问题中你需要更多的细节。在你想要的输出中,3和5代表什么,一些东西的数量,如果是,什么?请多解释一点。根据你的问题
选择“四月”作为月份,“3”作为周末nd,'5'作为公共
可以满足这个问题。Ya 3计算4月份的周末假期数,5表示4月份的公共假期数。如果周末(字段)的值为真,则不计算,如果公共(字段)的值为真是真的,那么算一下……SQL Server中没有
boolean
数据类型,您的意思是
bit
?并且您对3和5的评论与您显示的数据完全不匹配,例如,您说3是4月份的周末假期数,但您的数据显示只有2个。您需要更精确地解释您的逻辑。以下哪一个是e您显示的两个结果集是否确实需要?第一个结果集有3列,或者第二个结果集有4列?或者两者都需要?这在mssal中不起作用,因为“case weekend when true”替换为“case weekend when'true”。计数也将同时计数1和0。替换为sum或删除“else 0”这在mssal中不起作用,因为如果“case weekend when true”替换为“case weekend when'true”,则计数也将同时计数1和0。替换为sum或删除“else 0”