我想知道是否有人可以帮助我解决这个问题,我现在已经玩了至少10个小时了。我将使用来自wiseowl的Movies数据库来说明这一点。
我有以下SQL:
SELECT FilmReleaseDate
,FilmName
,directorname
,FilmRunTimeMinutes
,directorgender
,CountryName
,datename(M, FilmReleaseDate) AS [month]
,month(FilmReleaseDate) AS [month_no]
,year(FilmReleaseDate) AS [Year]
FROM tblFilm
INNER JOIN tblDirector ON directorID = FilmDirectorID
INNER JOIN tblCountry ON FilmCountryID = CountryID
WHERE FilmReleaseDate >= '2006-01-01'
现在说我想把它放到一个堆叠的图表中,每个国家都有电影,第二个轴会显示电影的运行时间。但问题在于我想要所有国家的平均值,而不是每个国家的平均值。有没有办法做到这一点所以我有1行而不是3行。
的方式从输出中可以看出,结果中有3个国家有3条线路,有没有办法在一条线路上获得所有线路的平均值,而不是每条线路的一条线路,因此输出只有一条线路显示平均。
如果有人可以提供帮助,我会非常感激,因为我花了无数个小时。您需要的任何其他信息都告诉我。
答案 0 :(得分:1)
试试这个脚本。然后在图表上使用新字段 D.AVGFilmRunTimeMinutes 。我在脚本的每个表上添加了别名。如果别名指向错误的表格,请更正别名。
SELECT A.FilmReleaseDate
,A.FilmName
,B.directorname
,D.AVGFilmRunTimeMinutes
,B.directorgender
,C.CountryName
,datename(M, A.FilmReleaseDate) AS [month]
,month(A.FilmReleaseDate) AS [month_no]
,year(A.FilmReleaseDate) AS [Year]
FROM tblFilm A
INNER JOIN tblDirector B ON directorID = A.FilmDirectorID
INNER JOIN tblCountry C ON A.FilmCountryID = B.CountryID
LEFT JOIN (SELECT AVG(FilmRunTimeMinutes) AS AVGFilmRunTimeMinutes,FilmDirectorID FROM tblFilm GROUP BY FilmDirectorID) D
ON D.FilmDirectorID = A.FilmDirectorID
WHERE A.FilmReleaseDate >= '2006-01-01'
答案 1 :(得分:1)
图表生成3行而不是1行的原因是由于每个月的图表分组(由多少个国家/地区决定)。
我不知道您的表的结构,因此我建议您在数据集中添加另一个字段:
YEAR(A.FilmReleaseDate) * 100 + MONTH(A.FilmReleaseDate) AS [YearMonth]
这将添加格式为YYYYMM
的字段将其添加到轴上的图表中,而不是年份和月份。
在“图表数据”窗口中,单击新创建的“年度类别组”旁边的下拉列表。选择“图表组属性”,然后复制名称。 (应该称之为 - Chart1_CategoryGroup)
最后一步是修改图表中胶片运行时间的表达式。
单击FilmRunTimeMinutes旁边的下拉列表,然后单击Series Properties。
在值字段中,使用以下内容:
=Avg(Fields!FilmRunTimeMinutes.Value,"Chart1_CategoryGroup1")
将Chart1_CategoryGroup1替换为您的类别组。