如何在 SQL 中使用 Case-When 设置优先级
How can I set priority using Case-When in SQL
对于工作中的项目,我需要能够优先考虑客户获得的杂志版本。
如果某人因为购买的类别而有资格获得多个版本的宣传册,则优先考虑:
- 女装
- 男装
- 媒体
- 最佳
所以,如果有人买了一件女式毛衣、一张 DVD、一个喂鸟器和男鞋,他们就会得到女式小册子。我很确定会使用 Case/When 语句,但我不是 100% 这么认为。
感谢您的帮助!
使用 CASE 表达式
SELECT
col,
CASE
WHEN col='Women''s' then 1
WHEN col='Men''s' then 2
WHEN col='Media' then 3
WHEN col='Best of' then 4
END as priority
FROM TABLE
您需要一个 table 将优先级分配给类别
select *
into #categories
from(
values
(4,'Women''s'),
(3,'Men''s' ),
(2,'Media' ),
(1,'Best of' )
) t(priority, title);
现在每个客户都获得了他所购买的最高优先级的称号。
select customer
, title = (select title
from #categories c2
where max(c.priority) = c2.priority)
from ( -- sample data
values
(10,'Women''s'),
(10,'Men''s'),
(10,'Media' ),
(10,'Best of' ),
(20,'Men''s'),
(20,'Best of' )
) tbl(customer, category)
join #categories c
on c.title=tbl.category
group by customer
对于工作中的项目,我需要能够优先考虑客户获得的杂志版本。
如果某人因为购买的类别而有资格获得多个版本的宣传册,则优先考虑:
- 女装
- 男装
- 媒体
- 最佳
所以,如果有人买了一件女式毛衣、一张 DVD、一个喂鸟器和男鞋,他们就会得到女式小册子。我很确定会使用 Case/When 语句,但我不是 100% 这么认为。
感谢您的帮助!
使用 CASE 表达式
SELECT
col,
CASE
WHEN col='Women''s' then 1
WHEN col='Men''s' then 2
WHEN col='Media' then 3
WHEN col='Best of' then 4
END as priority
FROM TABLE
您需要一个 table 将优先级分配给类别
select *
into #categories
from(
values
(4,'Women''s'),
(3,'Men''s' ),
(2,'Media' ),
(1,'Best of' )
) t(priority, title);
现在每个客户都获得了他所购买的最高优先级的称号。
select customer
, title = (select title
from #categories c2
where max(c.priority) = c2.priority)
from ( -- sample data
values
(10,'Women''s'),
(10,'Men''s'),
(10,'Media' ),
(10,'Best of' ),
(20,'Men''s'),
(20,'Best of' )
) tbl(customer, category)
join #categories c
on c.title=tbl.category
group by customer