Sql 在以下情况下,使用CASE获取特定年份的订单:

Sql 在以下情况下,使用CASE获取特定年份的订单:,sql,left-join,case-when,Sql,Left Join,Case When,我用这个,试图得到两列数据,一列是1998年的订单,另一列是1996年的订单,以及每个卖家的名字 到目前为止,我的SQL是: select salesperson.name, case when strftime('%Y', order_date) = 1998 then sum(orders.number) end as sales_in_1998, case when strftime('%Y', order_date) = 1996 then sum(orders.

我用这个,试图得到两列数据,一列是1998年的订单,另一列是1996年的订单,以及每个卖家的名字

到目前为止,我的SQL是:

select
    salesperson.name,
    case when strftime('%Y', order_date) = 1998 then sum(orders.number) end as sales_in_1998,
    case when strftime('%Y', order_date) = 1996 then sum(orders.number) end as sales_in_1996
from salesperson
left join orders on orders.salesperson_id = salesperson.id
group by salesperson.name;
(很抱歉,自从我将其加载到sqlite后,没有
YEAR()
函数)

然而,我只是得到了所有的空值。我做错了什么

将数据加载到其中

  • 案例
    位于
    SUM()的内部
  • 使用单引号进行字符串比较
  • 生成的查询:

    select sp.name,
           sum(case when strftime('%Y', o.order_date) = '1998' then o.number 
               end) as sales_in_1998,
           sum(case when strftime('%Y', o.order_date) = '1996' then o.number 
               end) as sales_in_1996
    from salesperson sp left join
         orders o
         on o.salesperson_id = sp.id
    group by sp.name;
    
  • 案例
    位于
    SUM()的内部
  • 使用单引号进行字符串比较
  • 生成的查询:

    select sp.name,
           sum(case when strftime('%Y', o.order_date) = '1998' then o.number 
               end) as sales_in_1998,
           sum(case when strftime('%Y', o.order_date) = '1996' then o.number 
               end) as sales_in_1996
    from salesperson sp left join
         orders o
         on o.salesperson_id = sp.id
    group by sp.name;
    

    美好的谢谢我忘了STRFTIME返回字符串。另外,为了整理结果集,我在案例末尾添加了一个ELSE 0:)很好!谢谢我忘了STRFTIME返回字符串。另外,为了整理结果集,我在案例末尾添加了一个ELSE 0:)