我正在制作一个显示整年数据的图表,但由于我是新手,我无法弄清楚如何在X轴上显示所有月份(包括没有数据的那些)
以下是我的SQL请求的SELECT部分:
SELECT DISTINCT
AB.Id AS ID,
MONTH(AP.Date) AS Date
导致以下数据:
| ID | Date |
|--------|--------|
| 1 | 2 |
| 2 | 3 |
| 3 | 2 |
| 4 | 2 |
| 5 | 3 |
| 6 | 3 |
| 7 | 3 |
|--------|--------|
目前我正在使用=MonthName(Fields!Date.Value))
作为类别组,产生以下图表:
4| X
3| X
2|
1|
0|_________________
February March
我想拥有的是这样的:
4| X
3| X
2|
1|
0|______________________________________
January February March April ...
我在网上使用数据库中的自定义表找到了一些解决方法,但在这种情况下我不能,因为它是MS Dynamics项目。
感谢您的时间。
答案 0 :(得分:3)
您需要将正确的数据返回到图表,以便在轴上包含某些内容。为此,您需要生成每个x轴值,然后找到与其相关的总数。
在下面的脚本中,我创建了一个日期表,表示当年每个月的月初。然后它会查找当月表格中的所有相关值并执行count
。然后,可以将其用作图表数据集,在客户端进行最少的处理,这将有助于报告性能。
declare @t table(ID int,DateValue Date)
insert into @t values (1,'20170204'),(2,'20170307'),(3,'20170203'),(4,'20170207'),(5,'20170304'),(6,'20170302'),(7,'20170309');
with d(d) as(select cast(dateadd(mm,n,dateadd(yyyy,datediff(yyyy,0,getdate()),0)) as date) from(values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11)) n(n))
select d.d
,count(t.ID) as c
from d
left join @t t
on(d.d = dateadd(mm,datediff(mm,0,t.DateValue),0))
group by d.d
order by d.d;
输出:
+------------+---+
| d | c |
+------------+---+
| 2017-01-01 | 0 |
| 2017-02-01 | 3 |
| 2017-03-01 | 4 |
| 2017-04-01 | 0 |
| 2017-05-01 | 0 |
| 2017-06-01 | 0 |
| 2017-07-01 | 0 |
| 2017-08-01 | 0 |
| 2017-09-01 | 0 |
| 2017-10-01 | 0 |
| 2017-11-01 | 0 |
| 2017-12-01 | 0 |
+------------+---+
答案 1 :(得分:1)
您可以使用所有月份为查询添加正确的联接,并将其列返回到输出:
SELECT DISTINCT
AB.Id AS ID,
m.n AS Date
right join (select * from (values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) m(n) ) m
on MONTH(AP.Date)=m.n