SSRS查询设计器“必须声明标量变量”,最多可以包含多个列

时间:2017-05-31 19:42:47

标签: sql-server reporting-services sql-server-2014

我的目标是在报告的数据集中获取三个不同列的最大值。我在SSRS查询设计器中使用此查询来获取新数据集:

SELECT  SurveyID,
    (SELECT Max(valueColumn) 
    FROM (VALUES (field1), (field2), (field3)) AS TableOfValues(valueColumn)) as MaxVal
FROM            ENVIRONMENTAL_EVW
WHERE        SurveyID = @surveyid

然而,不是像往常一样弹出对话框窗口而是让我有机会声明变量,我只是将“必须声明标量变量”作为错误。

如果我删除WHERE子句,它会给我一个“无法解析查询文本”错误,但仍然可以正确完成操作并显示结果表。如果我删除子查询以找到最大值,它会正确弹出窗口并询问变量的输入。

SSRS数据集中是否不支持这种子查询?我怎样才能在SSRS SELECT语句中找到最大值?任何值都可以为null。

我正在使用Visual Studio 2015,目标服务器设置为“SQL Server 2008 R2,2012或2014”以防万一。这是SQL-Server 2014。

1 个答案:

答案 0 :(得分:0)

我使用SQL Max of Multiple Columns中找到的内容来回答这个问题。我认为这个问题略有不同,因为它与SSRS有关,并且涉及空值。我仍然不知道为什么原始版本不起作用,但这样做了:

SELECT SurveyID,
EnvironmentalID,

CASE
    WHEN field1>= COALESCE(field2,'') AND field1 >= COALESCE(field3,'') THEN field1
    WHEN field2 >= COALESCE(field1,'') AND field2 >= COALESCE(field3,'') THEN field2
    WHEN field3 >= COALESCE(field1, '') AND field3 >= COALESCE(field2,'') THEN field3
    ELSE field1
END AS MaxVal

WHERE SurveyID = @surveyid

这对于最小值也是相反的,但是在COALESCE中,你需要放置一些远高于所有可能值的值。