Я пытаюсь получить разницу между двумя значениями из одной и той же таблицы, Мин и Макс это SSRS 2017 - PullRequest
1 голос
/ 28 марта 2020

Я пытаюсь получить разницу между Id1 и Id2, извлеченными из таблицы SQL, с помощью следующего запроса:

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 через текстовое поле, а также просто прямое уравнение. Я считаю, что моя проблема в том, что данные на самом деле находятся в одном столбце. Можете ли вы помочь, пожалуйста. Спасибо

1 Ответ

0 голосов
/ 28 марта 2020

Не можете ли вы упростить свой запрос до чего-то подобного ...

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, но, поскольку я не знаю, какие у вас требования, трудно сказать лучший подход.

Если это не поможет, опубликуйте образец данных и ожидаемый результат из образца, и вам будет легче ответить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...