【发布时间】:2015-12-17 07:36:49
【问题描述】:
我有下面的代码,它返回如下所示的结果(请注意 order 方法仅用于对数据进行排序)
Week_Variance_Range Returns_Due ORDERMETHOD
Thisweek 11 05
-1 11 02
-2 12 03
-3 5 04
现在这带来了所有数据,我刚刚发现有重复的返回 ID (RtnId),但我的分析需要不同的值。
所以对于This week,假设有 11 次退货。 2 可能来自相同的返回 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
【问题讨论】:
-
考虑将您的案例文本放在一个表格中并转到它 - 一个文本列。一个表需要将 6,7,8,9 全部连接到同一个 caseText。
标签: sql sql-server tsql subquery case