【发布时间】:2011-08-25 15:22:24
【问题描述】:
我有一个布局如下的表格。
Email Blast Table
EmailBlastId | FrequencyId | UserId
---------------------------------
1 | 5 | 1
2 | 2 | 1
3 | 4 | 1
Frequency Table
Id | Frequency
------------
1 | Daily
2 | Weekly
3 | Monthly
4 | Quarterly
5 | Bi-weekly
我需要在我的 asp.net 页面上提供一个网格显示,如下所示。
Email blasts per month.
UserId | Jan | Feb | Mar | Apr |..... Dec | Cumulative
-----------------------------------------------------
1 7 6 6 7 6 #xx
我能想到的唯一方法如下,每个月都有一个案例声明。
select SUM(
CASE WHEN FrequencyId = 1 THEN 31
WHEN FrequencyId = 2 THEN 4
WHEN FrequencyId = 3 THEN 1
WHEN FrequencyId = 4 THEN 1
WHEN FrequencyId = 5 THEN 2 END) AS Jan,
SUM(
CASE WHEN FrequencyId = 1 THEN 28 (29 - leap year)
WHEN FrequencyId = 2 THEN 4
WHEN FrequencyId = 3 THEN 1
WHEN FrequencyId = 4 THEN 0
WHEN FrequencyId = 5 THEN 2 END) AS Feb, etc etc
FROM EmailBlast
Group BY UserId
还有其他更好的方法来达到同样的效果吗?
【问题讨论】:
-
您确定显示的数据正确吗?仅仅因为某些东西被配置为在一段时间内发出特定时间并不意味着它确实如此。我可能对你在做什么是错误的,但我认为最好计算每月实际完成的爆炸次数......
-
你的最后一个案例不应该是 WHEN FrequencyId = 5 THEN 2
-
@chris,这些爆炸实际上是可以安排的。显示屏显示电子邮件将以当前频率发送多少次。相信我,这是一个要求,所以没有必要去看看这是对还是错。去过那里,做到了。
-
@Lost,你是对的。问题已更新。
-
@Alex J:只是确保。有时很难说。 ;)
标签: asp.net sql sql-server-2008