查询当月选择月份和周末的编号及公众假期(Query to select the month and

2019-09-17 14:41发布

我的数据库表假日包括现场广告Holidaydate->日期时间,WeekendHoliday->位,PublicHoliday->位我想weekendholiday的号,也publicholiday在特定月份的一年。

我的表值是如(例如)

Holidaydate       WeekendHoliday       PublicHoliday 
-----------       --------------       -------------
4/02/2012             true                 false
4/20/2012             true                 false
5/3/2012              true                 False
5/30/2012             false                true
4/05/2013             false                true   

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

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

Answer 1:

     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服务器可用。 这是MySQL的测试。 这里的年份和月份是函数返回日期的年份和月份。 CASE的语法应为整个数据库一样。



Answer 2:

我强烈建议使用日历表这种类型的查询。



Answer 3:

这里是你怎么能一个方式汇总您的数据:

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

partitioned CTE 替换每次约会与第一同月,然后该值用于分组和导出年和月份的名字从。 每个NULLIF()变换的每个'false'0 )值到NULL所以相应的COUNT()省略它。 其结果,只有'true'1 )的值进行计数。



文章来源: Query to select the month and nos of weekend and public holiday in that month