SQL服务器:根据价格列创建新列类别价格

SQL Server : create new column category price according to price column

我有一个 SQL 服务器 table,其列 price 如下所示:

10
96
64
38
32
103
74
32
67
103
55
28
30
110
79
91
16
71
36
106
89
87
59
41
56
89
68
32
80
47
45
77
64
93
17
88
13
19
83
12
76
99
104
65
83
95

现在我的目标是创建一个新列,为每个值提供 1 到 10 的类别。

例如,我列中的最大值是 110,最小值是 10。Max-min = 100。然后如果我想要 10 个类别,我会做 100/10= 10。因此这里是范围:

10-20    1
21-30    2
31-40    3
41-50    4
51-60    5
61-70    6
71-80    7
81-90    8
91-100   9
101-110 10

期望输出:

我的名为 cat 的新专栏应该如下所示:

price        cat
-----------------
10           1
96           9
64           6
38           3
32           3
103         10
74           7
32           3
67           6
103         10
55           5
28           2
30           3
110         10
79           7
91           9
16           1
71           7
36           3
106         10
89           8
87           8
59           5
41           4
56           5
89           8
68           6
32           3
80           7
47           4
45           4
77           7
64           6
93           9
17           1
88           8
13           1
19           1
83           8
12           1
76           7
99           9
104         10
65           6
83           8
95           9

有没有办法用 T-SQL 执行此操作?对不起,如果这个问题可能太简单了。我在网上搜索了很久。所以要么问题没有我想象的那么简单。要么我输入了错误的关键字。

是的 - case 语句可以做到这一点。

select 
    price
    ,case 
        when price between 10  and 20   then 1
        when price between 21  and 30   then 2
        when price between 31  and 40   then 3
        when price between 41  and 50   then 4
        when price between 51  and 60   then 5
        when price between 61  and 70   then 6
        when price between 71  and 80   then 7
        when price between 81  and 90   then 8
        when price between 91  and 100  then 9
        when price between 101 and 110  then 10
        else null
    end as cat
from [<enter your table name here>]

是的,几乎与您描述的计算完全一样:

select price,
       1 + (price - min_price) * 10 / (max_price - min_price + 1) as decile
from (select price, 
             min(price) over () as min_price,
             max(price) over () as max_price
      from t
     ) t;

1 +是因为你想要的值是从 1 到 10,而不是 0 到 9。