使用 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
我有下面的代码,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