我是Crystal Reports的新手,还在学习,所以我想知道我应该怎么做 . 我有以下存储过程:
CREATE PROCEDURE GetSurveyAnswerDetail
(@Question VARCHAR(255) = NULL, @AllowReportFlag CHAR(1) = NULL)
AS
SET NOCOUNT ON
DECLARE @rc INT
SET @rc = 1
IF (@Question IS NULL OR DATALENGTH(@Question) = 0
OR @AllowReportFlag IS NULL OR DATALENGTH(@AllowReportFlag) = 0)
RAISERROR('GetSurveyAnswerDetail is missing parameters.', 16, 1)
ELSE
BEGIN
DECLARE @AllowReport VARCHAR(100)
IF (@AllowReportFlag = 'N')
SET @AllowReport = ' AllowReport = ''Y'' AND '
ELSE
SET @AllowReport = ''
DECLARE @SQLStatement VARCHAR(5000)
SET @SQLStatement = 'SELECT COUNT(' + @Question + ') FROM tblSurveyAnswer WHERE ' + @AllowReport + @Question + ' != '''' GROUP BY ' + @Question + ' ORDER BY ' + @Question + ' DESC'
EXEC (@SQLStatement)
IF @@ERROR <> 0
RAISERROR('GetSurveyAnswerDetail has failed. Question may not exist.', 16, 1)
ELSE
SET @rc = 0
END
RETURN @rc
GO
这将返回一个数字列表 . 我想做的是在Crystal Reports中根据这些数字创建一个饼图 . 我知道您可以从存储过程设置数据源,但是当我这样做时,我没有可以选择的字段 . 我可能会以错误的方式解决这个问题,所以我很感激任何评论 .
2 回答
迈克尔,尝试让你的存储过程返回一个表 . 我的猜测是你没有看到任何字段,因为你没有返回任何字段 . 将返回行更改为
这应该将结果显示为报告中的字段 . 我不确定你是否可以在循环中单独运行proc来制作饼图 . 您可能需要从一个存储过程中返回所需的所有数据 .
有 must 是
select
查询,它隐藏在if
语句后面 not . 如果你的存储过程是:在此示例中,将显示 no 个字段 . 将其更改为:
在此示例中,将显示 will 工作和字段 .
我创建了一个虚拟参数,如
@question
并传递'Y' .