如何计算列的不同值的%差异

时间:2011-10-18 22:33:25

标签: sql ssrs-2008

enter image description here有一列 - 当前产品 - 根据库存列的值有两个值。这意味着当库存为空时,它被称为“当前产品”,当它有一些价值时,它被称为“匹配”。像这样......

==================================================================
Current Product       Stocked    AnnualSavings     Sodium
 Current product                                    450.00                    
  Match               yes          1234.00          432.00

现在SSRS 2008 R2报告中的钠文本框为空。当用户输入10时 那么我们必须检查钠的匹配值是否低于当前产品的10%。

我怎么能这样做??

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的要求,下面的查询将作为SSRS数据集。我想您要从表中选择Stocked字段不为空的任何行,并且在“当前产品”的特定范围内选择Sodium该范围由用户指定为报告的参数。

在报表本身的数据集查询中过滤它会容易得多,因为它取决于比较记录之间的值。

我认为如果我错过了这个,那么在示例表中添加更多行会有所帮助。

;
WITH
(
SELECT
   [Current Product] ,
   [Stocked] ,
   [OriginalProduct] ,
   [Sodium(Mg)]
FROM
   #TempConversion7
WHERE
   MemberPurchaseDataId IN ( SELECT DISTINCT
                              MemberPurchaseDataId
                             FROM
                              #TempConversion7
                             WHERE
                              SrNo > 1 )
                              ) AS ListCTE

SELECT
    *,
    CASE WHEN CurrentProd.[Sodium(Mg)]  >=
    ( MatchProd.[Sodium(Mg)] *(1.0 - ( @MatchValueParameter * 0.01)))
    AND CurrentProd.[Sodium(Mg)]  <=
    ( MatchProd.[Sodium(Mg)] *(1.0 + ( @MatchValueParameter * 0.01)))
    THEN
    1
    ELSE 0
    END
    AS WithinPercentRange
FROM
ListCTE AS CurrentProd
FULL OUTER JOIN
ListCTE AS MatchProd
ON CurrentProd.OriginalProduct = MatchProd.OriginalProduct
AND CurrentProd.[Current Product] = 'Current Product'
AND MatchProd.[Current Product] = 'Match'