sql - SQL:从 3 条记录中获取数据并合并为一条
问题描述
我有一张表,每天有 3 条记录,用于 3 个班次段。我正在尝试每天将记录合并为一行。
数据目前如下所示:
ID DayNum Flag SesNum SesType SesStart SesEnd
1 1 Y 1 Reg 06:15 10:15
1 1 Y 2 Brk 10:15 11:15
1 1 Y 3 Reg 11:15 15:15
1 2 Y 1 Reg 05:00 11:00
1 2 Y 2 Brk 11:00 12:00
1 2 Y 3 Reg 12:00 15:00
我需要把每天的三个片段合并成一个记录。因此,包含三个段的每个 ID 中的每一天都有一行。我希望它看起来像这样:
ID DayNum Flag S1_Type S1_Start S1_End S2_Type S2_Start S2_End S3_Type S3_Start S3_End
1 1 Y Reg 06:15 10:15 Brk 10:15 11:15 Reg 11:15 15:15
我尝试了以下方法,它几乎就在那里:
Select *
FROM (
select
a.WorkPatternID,
a.DayNo,
max(a.WorkedFlag) as 'WorkedFlag',
max(a.SessionType) as 'S1_Type',
max(a.SessionStart) as 'S1_Start',
max(a.SessionEnd) as 'S1_End',
max(b.SessionType) as 'S2_Type',
max(b.SessionStart) as 'S2_Start',
max(b.SessionEnd) as 'S2_End',
max(c.SessionType) as 'S3_Type',
max(c.SessionStart) as 'S3_Start',
max(c.SessionEnd) as 'S3_End'
FROM ( Select *
FROM WP_Patterns
WHERE SessionNo = 1 ) a
Inner JOIN ( select *
FROM WP_Patterns
WHERE SessionNo = 2 ) b
ON a.WorkPatternID = b.WorkPatternID
Inner JOIN ( select *
FROM WP_Patterns
WHERE SessionNo = 3 ) c
ON a.WorkPatternID = c.WorkPatternID
GROUP BY a.WorkPatternID, a.DayNo
) t
WHERE WorkedFlag = 'Y'
但是我认为 max 函数忽略了 S2 和 S3 中的一天,因此返回所有天的最大时间,这不是我需要的。
任何关于清理这个烂摊子的帮助都会很棒!
解决方案
您可以使用条件聚合:
select id, daynum, max(flag),
max(case when sesnum = 1 then SessionType end) as s1_sessionType,
max(case when sesnum = 1 then SessionStart end) as s1_ SessionStart,
max(case when sesnum = 2 then SessionType end) as s2_sessionType,
max(case when sesnum = 2 then SessionStart end) as s2_ SessionStart,
max(case when sesnum = 3 then SessionType end) as s3_sessionType,
max(case when sesnum = 3 then SessionStart end) as s3_ SessionStart
from WP_Patterns
group by id, daynum;
推荐阅读
- amazon-web-services - Redshift 计划查询错误通知
- godot - 空袭戈多
- javascript - WebStorm 无法自动完成样式化组件
- python - 代码从字典中删除重复字母
- google-chrome - 为什么 Google Chrome 不支持“链接”标头?
- command-line - Drush 错误:调用未定义的方法 Symfony\Component\Config\Definition\BaseNode::resetPlaceholders()
- r - 如何在“polynom::polynomial”对象中强制使用尾随零?(特别是从 ggpubr 修改 stat_lm 和 stat_regline_equation 的行为)
- linux - Linux:systemd 目标依赖项
- macos - 在 macOS 上使用 RealityKit ARView
- java - 使用 apache PDFBox 删除图像时删除空白