如何在SQL中生成CASE表达式

本文关键字:CASE 表达式 SQL | 更新日期: 2023-09-27 18:20:16

我有一个相对简单的查询,我不知道如何在EF:中表达

SELECT BrandName,
    CASE BrandName
      WHEN 'LG' THEN 1
      WHEN 'Samsung' THEN 2
      WHEN 'Sony' THEN 3
      ELSE 100
    END as BrandWeight
FROM Brands

基本上,我需要返回带有每个品牌"权重"的品牌列表,而权重是在运行时定义的(以及带有权重的品牌列表)。

请注意,这是一个非常简单的例子。事实上,我们有一个复杂的电子商务网站,里面有很多遗留代码,最近客户要求添加一个选项,首先显示某些产品,无论是基于品牌还是其他条件。我们有很多我不想触及的逻辑——分页、搜索等——所以我的想法是将"权重"添加到初始的"Select"查询中,然后按"权重"排序,然后完成其余的逻辑。

如何在SQL中生成CASE表达式

最坏情况:

from s in something
select new 
           {s.BrandName, 
             BrandWeight = s.BrandName == "LG" 
                                             ? 1 : s.BrandName == "Samsung" 
                                             ? 2 : s.BrandName == "Sony" 
                                             ? 3 : 100}

基本上,您可以链接if else,这应该可以工作,但它是"丑陋的"