sql - 我试图从同一个表中获取两个值之间的差异,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。我相信我的问题是数据实际上在一列中。你能帮忙吗?谢谢
解决方案
你能不能把你的查询简化成这样的……
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 中完成所有这些操作,但我不知道您的要求是什么,很难说出最佳方法。
如果这没有帮助,请发布数据样本和样本的预期输出,这样会更容易回答。