3

我正在使用 SQL Server 2008。我有客户的销售额,我想将其与客户前一年购买的产品进行比较,并计算增长。这一切都很好,但是一旦客户在某个月份有负数,它就会带回错误的 Target & Growth 数据。

Customer     SalesLastYearMonth      SalesThisYearMonth      Target     Growth
------------------------------------------------------------------------------
abcd         -1                      15                      ????       ???

代码:

SELECT
    Customer,
    CASE 
        WHEN SalesThisYearMonth IS NULL THEN (SalesLastYearMonth * -1)
        WHEN SalesLastYearMonth IS NULL THEN SalesThisYearMonth 
        ELSE SalesThisYearMonth -  SalesLastYearMonth END as Target,
    CASE 
        WHEN SalesThisYearMonth IS NULL THEN -1 
        WHEN SalesLastYearMonth IS NULL THEN 1 
        WHEN SalesThisYearMonth = 0 then -1
        WHEN SalesLastYearMonth = 0 then 1
        ELSE ( SalesThisYearMonth - SalesLastYearMonth) / SalesLastYearMonth END AS Growth
4

3 回答 3

0

假设你想要 TARGET=16, GROWTH=16,那么应该这样做:

SELECT
    Customer,
    CASE 
        WHEN SalesThisYearMonth IS NULL THEN (SalesLastYearMonth * -1)
        WHEN SalesLastYearMonth IS NULL THEN SalesThisYearMonth 
        ELSE SalesThisYearMonth -  SalesLastYearMonth END as Target,
    CASE 
        WHEN SalesThisYearMonth IS NULL THEN -1 
        WHEN SalesLastYearMonth IS NULL THEN 1 
        WHEN SalesThisYearMonth = 0 then -1
        WHEN SalesLastYearMonth = 0 then 1
        ELSE ( SalesThisYearMonth - SalesLastYearMonth) / ABS(SalesLastYearMonth) END AS Growth

但是,我真的不确定那里的增长 - 不确定您为什么要除以 SalesLastYearMonth。在上面的情况下这有效,但如果 SalesLastYearMonth 是 -4,除以 4 你想要什么?

于 2013-02-19T07:28:05.967 回答
0

只是一个小建议。尝试使用 ISNULL() 函数。如果您选择的值为 NULL,那么您可以给出默认返回值。据我所知,它比 CASE WHEN 快得多。

于 2013-06-04T10:43:20.647 回答
0

你除以一个负数:

SalesLastYearMonth = -1

您需要检查它或返回绝对值。

于 2013-02-19T07:28:47.260 回答