如何在 SQL 中使用 Case-When 设置优先级

How can I set priority using Case-When in SQL

对于工作中的项目,我需要能够优先考虑客户获得的杂志版本。

如果某人因为购买的类别而有资格获得多个版本的宣传册,则优先考虑:

  1. 女装
  2. 男装
  3. 媒体
  4. 最佳

所以,如果有人买了一件女式毛衣、一张 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