Sql 查询以选择该月份以及该月份的周末和公共假日的数量
我的数据库表Holiday包括ad Holidaydate->datetime、WEKENDHOLIDAY->bit、PublicHoliday->bit字段 我想要一个特定月份的星期日和公共假日的数量 我的表格值如下(示例) 所以现在输出应该是这样的: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
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”