2015-01-07 3 views
0

이 OrderCountPercentage 계산 이외의 다른 SQL 문이 있습니다. 수식이 맞으면 왜 계산하지 않는지 이해할 수 없습니다. 나는 이것이 COUNT 함수를 사용하고 있다는 사실과 관련 있다고 생각할 수 있습니다. 어떤 도움을 주셔서 감사합니다.SQL Server 백분율 계산이 올바르게 계산되지 않습니다.

SELECT Table2014.OrderDate                    AS December2014OrderDate, 
     ISNULL(Table2014.Total, 0)                   AS December2014DailySales, 
     ISNULL(Table2013.Total, 0)                   AS December2013DailySales, 
     ISNULL(Table2014.Total, 0) - ISNULL(Table2013.Total, 0)           AS DailySalesDifference, 
     (ISNULL(Table2014.Total, 0) - ISNULL(Table2013.Total, 0))/NULLIF(Table2013.Total, 0) * 100  AS SalesPercentage, 
     ISNULL(Table2014.OrderCount, 0)                 AS December2014DailyOrderCount, 
     ISNULL(Table2013.OrderCount, 0)                 AS December2013DailyOrderCount, 
     ISNULL(Table2014.OrderCount, 0) - ISNULL(Table2013.OrderCount, 0)         AS DailyOrderCountDifference, 
     (ISNULL(Table2014.OrderCount, 0) - ISNULL(Table2013.OrderCount, 0))/Table2013.OrderCount * 100 AS Percentage 
FROM (SELECT Sum(order_header_total.oht_net)       AS Total, 
       Dateadd(DAY, 0, Datediff(D, 0, order_header.oh_datetime)) AS OrderDate, 
       Count(order_header.oh_order_number)      AS OrderCount 
     FROM dbo.order_header_total 
       INNER JOIN dbo.order_header 
         ON order_header_total.oht_oh_id = order_header.oh_id 
     WHERE order_header.oh_datetime BETWEEN '12/01/2014 00:00:00' AND '12/31/2014 23:59:59' 
       AND order_header.oh_os_id IN (1, 6, 4) 
       AND order_header.oh_cd_id = 76 
     GROUP BY Dateadd(DAY, 0, Datediff(D, 0, order_header.oh_datetime))) Table2014 
     LEFT OUTER JOIN (SELECT Sum(order_header_total.oht_net)            AS Total, 
           Dateadd(YEAR, 1, Dateadd(DAY, 0, Datediff(D, 0, order_header.oh_datetime))) AS OrderDate, 
           Count(order_header.oh_order_number)           AS OrderCount 
         FROM dbo.order_header_total 
           INNER JOIN dbo.order_header 
             ON order_header_total.oht_oh_id = order_header.oh_id 
         WHERE order_header.oh_datetime BETWEEN '12/01/2013 00:00:00' AND '12/31/2013 23:59:59' 
           AND order_header.oh_os_id IN (1, 6, 4) 
           AND order_header.oh_cd_id = 76 
         GROUP BY Dateadd(YEAR, 1, Dateadd(DAY, 0, Datediff(D, 0, order_header.oh_datetime)))) Table2013 
        ON Table2013.OrderDate = Table2014.OrderDate 
ORDER BY Table2014.OrderDate 

답변

0

문제는 아마도 정수입니다. 나는 당신이 다음과 같이 말하고 있다고 가정합니다 :

(ISNULL(Table2014.OrderCount, 0) - ISNULL(Table2013.OrderCount, 0))/Table2013.OrderCount * 100 AS Percentage 

이들 모두가 정수인 경우, 나눗셈은 정수입니다. 나는 보통 1.0을 곱하여이 문제를 해결합니다. 하지만 더 공식적인 방법은 값 중 하나를 부동 소수점 또는 숫자로 변환하는 것입니다.

(ISNULL(Table2014.OrderCount, 0) - ISNULL(Table2013.OrderCount, 0))/cast(Table2013.OrderCount as float) * 100 AS Percentage 
+0

완벽합니다. – TowelsRus

관련 문제