我的目标是在报告的数据集中获取三个不同列的最大值。我在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。
答案 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中,你需要放置一些远高于所有可能值的值。