0

我正在尝试使用 cfchart 创建面积图,但不知道如何去做。我正在查询表中的所有评论,并希望在创建时显示时间段(x 轴上的天或月)和输出评论数。这是评论查询:

<cfquery name="qGetComments" datasource="#session.datasource#">
SELECT PersonFirstName
       , PersonLastName
       , PersonZip
       , CommentCode
       , refTopicID
       , tbComment.CommentID
       , tbComment.CreateDateTime
FROM tbPerson 
JOIN tbComment ON tbPerson.PersonID = tbComment.PersonID
</cfquery>

从这里开始,我不确定要放入 cfchart 以按我想要的方式输出面积图的值。像这样的东西?

<cfchart chartWidth="400" show3D="yes"> 
    <cfchartseries type="area" query="qGetComments" 
       valueColumn="CommentID" 
       itemColumn="CreateDateTime" /> 
</cfchart> 
4

1 回答 1

2

在上面的 Server 2008+ 中按日期对记录进行分组的一种简单方法是将datetime列转换为date. 然后只需使用“CommentDate”列作为图表项,使用“NumOfComments”作为值:

SELECT CONVERT(DATE, tbComment.CreateDateTime) AS CommentDate
      , COUNT(*) NumOfComments
FROM  tbPerson INNER JOIN tbComment ON tbPerson.PersonID = tbComment.PersonID
GROUP BY CONVERT(DATE, tbComment.CreateDateTime); 


您可以通过格式化 SQL 中的日期来使图表标签对用户更加友好(请参阅cast 和 convert)。只需确保按date值而不是格式化字符串对结果进行排序。否则,图表标签可能不会按正确的时间顺序出现(这是一个常见错误):

--- format as:  Mon dd, yyyy
SELECT CONVERT(VARCHAR, tbComment.CreateDateTime, 107) AS CommentDateString
      , COUNT(*) NumOfComments 
FROM  tbPerson INNER JOIN tbComment ON tbPerson.PersonID = tbComment.PersonID 
GROUP BY CONVERT(VARCHAR, tbComment.CreateDateTime, 107) 
ORDER BY CONVERT(DATE, CONVERT(VARCHAR, tbComment.CreateDateTime, 107), 107)

SQLFiddle

顺便说一句,如果 HTML 图表是一个选项,您可能会考虑 Scott 的建议。通常CFChart对于简单的情况来说很好,但是一旦您开始自定义外观(这种情况总是会发生),您通常最好直接使用底层工具。

于 2013-11-04T00:13:43.007 回答