使用 Distinct Count within/with 子查询

Using Distinct Count within/with subquery

我有下面的代码,return结果如下所示(请注意排序方法仅用于我可以对数据进行排序)

   Week_Variance_Range  Returns_Due ORDERMETHOD
   Thisweek              11            05
   -1                    11            02
   -2                    12            03
   -3                    5             04

现在这会带来所有数据,我刚刚发现有重复的 return 个 ID (RtnId),但我的分析需要不同的值。

所以对于 This week 可以说有 11 Returns。 2 可能来自同一个 return ID,因此本周的数字应该是 10 而不是 11。

请通过以下代码查看:

SELECT        
    Week_Variance_Range, 
    COUNT(*) AS Returns_Due, 
    CASE 
       WHEN t.Week_Variance_Range = 'Created This Week ' THEN '01' 
       WHEN t.Week_Variance_Range = '-1' THEN '02' 
       WHEN t.Week_Variance_Range = '-2' THEN'03' 
       WHEN t.Week_Variance_Range = '-3' THEN '04' 
       WHEN t.Week_Variance_Range = '-4' THEN '05' 
       WHEN t.Week_Variance_Range = '-5' THEN '06' 
       WHEN t.Week_Variance_Range = '-9 to - 6    ' THEN '07' 
       WHEN t.Week_Variance_Range = '-19 to - 10  ' THEN '08' 
       WHEN t.Week_Variance_Range = '-39 to - 20  ' THEN '09' 
       WHEN t.Week_Variance_Range = '-59 to - 40  ' THEN '10' 
       WHEN t.Week_Variance_Range = '-79 to - 60  ' THEN '11' 
       WHEN t.Week_Variance_Range = '-99 to - 80  ' THEN '12' 
       WHEN t.Week_Variance_Range = '-500 to - 100 ' THEN '13' 
    END AS ORDERMETHOD
FROM (
    SELECT        
       CASE
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 BETWEEN - 500 AND - 100 THEN '-500 to - 100 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 BETWEEN - 99 AND - 80 THEN '-99 to - 80 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 BETWEEN - 79 AND - 60 THEN '-79 to - 60 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 BETWEEN - 59 AND - 40 THEN '-59 to - 40 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 BETWEEN - 39 AND - 20 THEN '-39 to - 20 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 BETWEEN - 19 AND - 10 THEN '-19 to - 10 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 BETWEEN - 9 AND - 6 THEN '-9 to - 6 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 = - 5 THEN '-5 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 = - 4 THEN '-4 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 = - 3 THEN '-3 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 = - 2 THEN '-2 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 = - 1 THEN '-1 ' 
          WHEN abs(DATEDIFF(WEEK, RtnDt, GETDATE())) * - 1 = 0 THEN 'Created This Week ' 
       END AS Week_Variance_Range
    FROM dbo.vw_AN_Admin_VendorReturns
    WHERE (Complete <> 'X')
) AS t
GROUP BY Week_Variance_Range
ORDER BY ORDERMETHOD

RtnId 添加到派生 table 中的 select 语句,并在外部查询中使用 count(distinct rtnid)

SELECT        
    Week_Variance_Range, 
    COUNT(DISTINCT RtnId) AS Returns_Due, 
    /* long case expression */
FROM (
    SELECT RtnId,      
        /* long case expression */
    FROM dbo.vw_AN_Admin_VendorReturns
    WHERE (Complete <> 'X')
) AS t
GROUP BY Week_Variance_Range
ORDER BY ORDERMETHOD