突出显示最小值,如果不在列组中第二个最小值的X范围内?

时间:2014-07-11 11:31:39

标签: sql-server tsql reporting-services ssrs-tablix

我可以通过在组外添加隐藏的column group列并使用Min(Value)进行比较来突出显示SSRS Tablix的ReportItem!MinVale.Value每行中的最小值,而不会出现任何问题。< / p>

该列计算如下:

=IIF(Fields!TotalSales.Value=0
     ,0
     ,Fields!Sales.Value / IIF(Fields!TotalSales.Value<>0
                               ,Fields!TotalSales.Value
                               ,1
                               )
     )

我被要求只在1%或更多的边际内突出显示它。

sample results

此记录不应突出显示,因为它只比下一个最低值小.02%。

我无法想出一种方法来计算第二个最低值进行比较,并试图谷歌它没有发现任何东西。

是否可以计算列组中每行的第二个最小值?

(如果可能的话,我希望避免更改底层的TSql查询,以便在新字段中对结果进行排名,以便根据这一点进行突出显示,因为这是更大的报告集的一小部分。)

1 个答案:

答案 0 :(得分:0)

DECLARE @MyTable TABLE
(
    RowId VARCHAR(20),
    Field1 INT,
    Field2 INT,
    Field3 INT,
    Field4 INT
)

INSERT INTO @MyTable
VALUES
('A', 1, 2, 3, 4 ),
('B', 2, 3, 4, 1 ),
('C', 3, 4, 1, 2 ),
('D', 4, 1, 2, 3 )


SELECT m.*,
    u.FieldName,
    u.ValueRank
FROM @MyTable m
LEFT JOIN
(
    SELECT u.RowId,
        u.FieldName,
        u.Value,
        RANK() OVER(PARTITION BY u.RowId ORDER BY VALUE DESC) ValueRank
    FROM @MyTable
    UNPIVOT
    (
        Value
        for FieldName in (Field1, Field2, Field3, Field4)
    ) u
) u
ON u.RowId = m.RowId
AND u.ValueRank = 2

这是输出:

RowId   Field1  Field2  Field3  Field4  FieldName   ValueRank
A   1   2   3   4   Field3  2
B   2   3   4   1   Field2  2
C   3   4   1   2   Field1  2
D   4   1   2   3   Field4  2

我没有对列进行疏忽,因此我可以对值进行排名,然后我只从最后一个等级(按desc排序)中拉出第二个来找到哪个列具有3值。您可以使用相同的技术来排序从最少到最多的行等列。