sql - SQL Query 对单独查询的结果进行分类
问题描述
我正在尝试对单独查询的结果运行查询,以根据唯一的 Route_Code 和 Delivery_Day 更新每条记录的 Route_Type 列。对于选择查询中的每个不同的 Route_Code,Route_Type 应根据以下逻辑进行更新:
- 如果没有针对 Delivery_Day = 'Mon' 的特定 Route_Code 的记录,则 Route_Type 应更新为 'A'
- 如果没有 Delivery_Day = 'Sat' 的特定 Route_Code 的记录,则 Route_Type 应更新为 'B'
- 如果没有特定 Route_Code 的记录,其中 Delivery_Day = 'Mon' OR 'Sat',则 Route_Type 应为 'TBD'
- Else Route_Type = '两者。'
数据:
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() 函数只处理单个参数,并且想知道从这里去哪里。
解决方案
这听起来像聚合。我觉得你的逻辑有点难以理解。如果我理解正确,“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
推荐阅读
- google-api - Google Photos API - 如何过滤相册以获取照片(JPEG)只有在设置了albumId时?
- php - 获取类 App\Http\Controllers\PostController 在 Laravel 项目中不存在错误
- python - Python数组混淆
- mysql - 反向 IN 功能
- android - 如何使用 Android Studio 检查 ImageView 是否有位图
- gcloud - 如何使用 gcloud 克隆 --recursive
- angular - NGRX - 每次效果后运行功能
- javascript - Kendo TreeList:为了用户体验而扩展应该保持扩展
- mongodb - 等价于 WaitForNonStaleResults()?
- unity3d - Unity 粒子系统 - 从被破坏的游戏对象中吸收粒子给玩家