我有一个数据绑定图表从以下MSSQL查询运行 -
"SELECT dateinvoiced AS Date, (SELECT SUM(value) FROM jobs WHERE dateinvoiced >= '" +
new DateTime(year, month, 1).ToString("yyyy-MM-dd") + "' AND dateinvoiced <=
j.dateinvoiced)/100 AS Revenue FROM jobs j WHERE dateinvoiced >= '" + new
DateTime(year, month, 1).ToString("yyyy-MM-dd") + "' AND dateinvoiced <= '" + new
DateTime(year, month, daysInMonth).ToString("yyyy-MM-dd") + "' GROUP BY dateinvoiced"
(请原谅我的想象是一种处理日期的奇怪方式,长篇故事,但我很快就会改变它们。)
该查询获得了用户业务在日历月内按天完成的累计工资总额。图表本身会将此值与当月的目标值进行比较,因此用户可以看到每月目标的进度。事情的这一面都很好,查询也是如此。这个问题出现在本月初。
从上面的查询中绘制的线显然从第一个数据点开始。如果用户在一个月中途之前没有拿到任何钱,然后取大值,则图表上不会绘制任何一条线,因为只有一个点存在。它将保持这样,直到用户在晚些时候拿钱,此时他们可以看到一条线。
我想要的是确保从原点始终在图表上看到一条线的方法,即使用户只有一天的数据。
我能够自己完成这项工作的唯一方法是检查数据绑定之前第1天是否有数据,以及是否只是将零值销售的记录插入表中。我相信你能明白为什么这是不可接受的。有没有办法手动将点添加到数据绑定表?我已经尝试过,似乎无法做到这一点。如果失败了,是否有某种方法可以改变SQL查询以为每个日期提供一个值,即使数据不存在于所有日期?或任何其他方法?
感谢。
答案 0 :(得分:0)
根据评论中的建议,我认为如果您可以将系列设置为Column
类型而不是Line
会更容易,因为所有日子都不需要有与之关联的记录。< / p>
如果您希望所有这些日期都可用,那么输出所有日期的查询将会很好,然后您可以将其加入所需的集合以获取这些值。用零代替你没有的值。
WITH AllDays
AS
(
SELECT CAST('20120101' as datetime) AS DAYS
UNION ALL
SELECT DATEADD(dd, 1, DAYS)
FROM AllDays
WHERE DATEADD(dd, 1, DAYS) < cast('20120201' as datetime)
)
SELECT DAYS
FROM AllDays -- consider making the join here as you need