Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSRS查询设计器“;必须声明标量变量“;对于多个列的最大值_Sql Server_Reporting Services_Sql Server 2014 - Fatal编程技术网

Sql server SSRS查询设计器“;必须声明标量变量“;对于多个列的最大值

Sql server SSRS查询设计器“;必须声明标量变量“;对于多个列的最大值,sql-server,reporting-services,sql-server-2014,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 = @surveyi

我的目标是获得报表数据集中三个不同列的最大值。我正在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。

我用在中找到的内容回答了这个问题。我认为这个问题略有不同,因为它涉及SSR,并且涉及空值。我仍然不知道为什么原始版本不起作用,但这确实起了作用:

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
这对最小值也起相反的作用,但是您需要将一些值设置为比所有可能的值高得多的值,而不是合并中的“”值。

我使用在中找到的内容来回答这个问题。我认为这个问题略有不同,因为它涉及SSR,并且涉及空值。我仍然不知道为什么原始版本不起作用,但这确实起了作用:

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
这对最小值也起相反的作用,但是在合并中,您需要将一些值放在比所有可能值高得多的位置,而不是放在“”中。