首页 > 解决方案 > 我试图从同一个表中获取两个值之间的差异,Min 和 Max 是 SSRS 2017

问题描述

我试图通过以下查询从 SQL 表中获取 Id1 和 Id2 之间的区别:

SELECT
[Id],
[CollectedDate],
[DataValue]

INTO #tmpPollingStorage2 --- temporary table
FROM
    [dbo].[PollingStorage]
WHERE
    ((DataSource = 35) or (DataSource = 36) or (DataSource = 37) or (DataSource = 38)) AND 
(CollectedDate >= (@prmStartDate) OR (@prmStartDate) IS NULL) AND (CollectedDate <= (@prmEndDate) OR 
(@prmEndDate) IS NULL) AND (DataSource = (@prmDataSource) OR (@prmDataSource) IS NULL)  
(
Select TOP 1 MAX(DataValue) as Id1 FROM [#tmpPollingStorage2]
UNION ALL
Select TOP 1 MIN(DataValue) as Id2 FROM [#tmpPollingStorage2]
)
 DROP TABLE #tmpPollingStorage2

我试图添加一个带有 ID2 的文本框,并使用一个表达式通过文本框以及一个直线方程生成 Id1 - Id2。我相信我的问题是数据实际上在一列中。你能帮忙吗?谢谢

标签: sqlreporting-services

解决方案


你能不能把你的查询简化成这样的……

SELECT DISTINCT
        [Id], [CollectedDate],
        Id1 = MAX([DataValue]) OVER(),
        Id2 = MIN([DataValue]) OVER()
    FROM
        [dbo].[PollingStorage]
    WHERE
        DataSource IN (35,36,37,38)
        AND (CollectedDate >= @prmStartDate OR @prmStartDate IS NULL) 
        AND (CollectedDate <= @prmEndDate OR @prmEndDate IS NULL)
        AND (DataSource = @prmDataSource OR @prmDataSource IS NULL) 

这将为您提供 4 列,Id1 和 Id2 在每一行上都是相同的,因此在 SSRS 中,如果它们在聚合范围中使用,您可以设置类似的表达式

=FIRST(Fields!Id1.Value) - FIRST(Fields!Id2.Value)

您甚至可以在 SQL 中完成所有这些操作,但我不知道您的要求是什么,很难说出最佳方法。

如果这没有帮助,请发布数据样本和样本的预期输出,这样会更容易回答。


推荐阅读