如果客户指定了访问天数,如何按月计算访问量

ang*_*gel -1 sql sql-server sql-server-2005 unpivot

我有这张桌子

customer sunday monday tuesday wedesneday thursday friday saturday
1        0      0       1       1          1       0       0
2        0      1       0       0          0       0       1
3        0      0       1       0          1       0       1
4        0      0       1       1          0       1       0
5        0      1       0       0          1       1       1
6        0      0       1       0          1       1       0
7        0      1       0       1          1       0       1
8        0      0       0       0          1       1       0
9        0      1       1       1          0       0       1
Run Code Online (Sandbox Code Playgroud)

现在我有下一个参数>年和月1月,2月,3月(或任何用户选择) 按月计划的访问量如何?

注意:对于每个月没有精确的星期日开始或星期六完成,并且monts没有相同的数量天.

我相信我可以获得用户选择的每个月的第一天和最后一天

使用循环和选择使用datepart> datepart(工作日,'1 /'+(某个月)+'\'+ year_choosed_by_user)

我相信我能得到一些东西

month, startday, lastday, days
1        0         2       31
2        3         3       29
3        4         6       30
Run Code Online (Sandbox Code Playgroud)

其中0 =星期日,6 =星期六,它有帮助吗?我将使用datepart获得#tmptable

Tar*_*ryn 5

我不清楚你要做什么,但下面的解决方案,创建一个日期列表,UNPIVOT你现有的数据,然后计算每个月的约会数:

;with dates (datevalue) as
(
  select cast('2012-10-01' as datetime)
  union all
  select dateadd(d, 1, datevalue)
  from dates
  where dateadd(d, 1, datevalue) <= cast('2012-12-01' as datetime)
) 
select count(*) TotalAppts, datename(month, d.datevalue) [Month]
from dates d
inner join 
(
  select client, value, col
  from yourtable
  unpivot
  (
    value
    for col in (Sunday, Monday, Tuesday, Wednesday, 
                Thursday, Friday, Saturday)
  ) unpiv
) src
  on datename(dw, d.datevalue) = col
where value = 1
group by datename(month, d.datevalue)
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

结果:

| TOTALAPPTS |    MONTH |
-------------------------
|          5 | December |
|        122 | November |
|        125 |  October |
Run Code Online (Sandbox Code Playgroud)