【问题标题】:SQL Query to categorize results of separate querySQL Query 对单独查询的结果进行分类
【发布时间】:2020-04-28 04:19:16
【问题描述】:

我正在尝试对单独查询的结果运行查询,以根据唯一的 Route_Code 和 Delivery_Day 更新每条记录的 Route_Type 列。对于 select 查询中的每个不同 Route_Code,Route_Type 应根据以下逻辑进行更新:

  1. 如果 Delivery_Day = 'Mon' 的特定 Route_Code 没有记录,则 Route_Type 应更新为 'A'
  2. 如果 Delivery_Day = 'Sat' 的特定 Route_Code 没有记录,则 Route_Type 应更新为 'B'
  3. 如果没有特定 Route_Code 的记录,其中 Delivery_Day = 'Mon' OR 'Sat',则 Route_Type 应为 'TBD'
  4. Else Route_Type = 'Both.'

数据:

Record   Route_Code   Delivery_Day   Route_Type
1        112          Mon
2        112          Thur
3        112          Sat
4        112          Sun
5        113          Tue
6        113          Fri
7        113          Sat
8        113          Sun
9        113          Wed

选择查询:

Select Distinct Route_Code
From Deliveries;

结果:

     Route_Code
1    112
2    113

查询应返回所有唯一的 Route_Code 和每个计算的 Route_Type,如下所示...

想要的查询结果:

     Route_Code   Route_Type
1    112          Both
2    113          A

作为后续行动,我希望所有记录少于 1 个月的 Route_Code 都显示“待定”。到目前为止我的逻辑是

When
Max(sum(case when Delivery_Day= 'Mon' then 1 else 0 end),
    sum(case when Delivery_Day= 'Tue' then 1 else 0 end),
    sum(case when Delivery_Day= 'Wed' then 1 else 0 end),
    sum(case when Delivery_Day= 'Thu' then 1 else 0 end),
    sum(case when Delivery_Day= 'Fri' then 1 else 0 end),
    sum(case when Delivery_Day= 'Sat' then 1 else 0 end),
    sum(case when Delivery_Day= 'Sun' then 1 else 0 end)
Then 'TBD'

我意识到本机 Max() 函数只处理单个参数,我想知道从这里去哪里。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    这听起来像是聚合。我觉得你的逻辑有点难以理解。如果我理解正确,“B”有星期一交货,“A”有星期六。逻辑如下:

    select route_code,
           (case when sum(case when Delivery_Day = 'Mon' then 1 else 0 end) > 0 and
                      sum(case when Delivery_Day = 'Sat' then 1 else 0 end) > 0 
                 then 'Both'
                 when sum(case when Delivery_Day = 'Mon' then 1 else 0 end) > 0 
                 then 'B'
                 when sum(case when Delivery_Day = 'Sat' then 1 else 0 end) > 0 
                 then 'A'
                 else 'TBD'
            end) as route_type       
    from delivies
    group by route_code
    

    【讨论】:

    • 是的,逻辑是如果路线代码没有记录在星期一交货,则路线类型应为“A”。如果周六给定路线代码没有送货,则路线类型应为“B”。
    猜你喜欢
    • 2019-12-23
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    相关资源
    最近更新 更多