mysql - mysql动态数据透视表组
问题描述
我正在从一些表中进行动态透视:
select
spec.id,
'Spec1',
(if(DATE_FORMAT(schedule.data,'%Y-%m-%d') = '2019-11-12', DATE_FORMAT(data,'%H:%i'),0)) as "12-11-2019",
(if(DATE_FORMAT(schedule.data,'%Y-%m-%d') = '2019-11-14', DATE_FORMAT(data,'%H:%i'),0)) as "14-11-2019",
(if(DATE_FORMAT(schedule.data,'%Y-%m-%d') = '2019-11-19', DATE_FORMAT(data,'%H:%i'),0)) as "19-11-2019"
from service_spec inner join spec on spec.id = service_spec.spec_id
left join schedule on service_spec.spec_id = schedule.spec_id
where spec.id = 506
group by schedule.data
order by spec.name
这是返回的查询
id Spec1 12.11.2019 14.11.2019 19.11.2019
508 Spec1 10:00 0 0
508 Spec1 10:30 0 0
508 Spec1 11:00 0 0
508 Spec1 11:30 0 0
508 Spec1 12:00 0 0
508 Spec1 0 0 10:00
508 Spec1 0 0 10:30
508 Spec1 0 0 11:00
508 Spec1 0 0 11:30
508 Spec1 0 0 12:00
这是我的期望:
id Spec1 12.11.2019 14.11.2019 19.11.2019
508 Spec1 10:00 0 10:00
508 Spec1 10:30 0 10:30
508 Spec1 11:00 0 11:00
508 Spec1 11:30 0 11:30
508 Spec1 12:00 0 12:00
我怎么能这样做?
解决方案
这有点棘手。您需要条件聚合,但您没有它的列。
您可以使用以下方法创建一个row_number()
:
select sc_id, 'Spec1',
max(case when date(sc_data) = '2019-11-12'
then date_format(sc_data, '%H:%i')
end) as "12-11-2019",
max(case when date(sc_data) = '2019-11-14'
then date_format(sc_data, '%H:%i')
end) as "14-11-2019",
max(case when date(sc_data) = '2019-11-19'
then date_format(sc_data, '%H:%i')
end) as "19-11-2019"
from (select s.id, sc.data as sc_data,
row_number() over (partition by date(sc.data) order by sc_data) as seqnum
from service_spec ss inner join
spec s
on s.id = ss.spec_id left join
schedule sc
on ss.spec_id = sc.spec_id
where s.id = 506 and
date(sc.data) in ('2019-11-12', '2019-11-14', '2019-11-19')
) s
group by seqnum
order by seqnum;
在 MySQL 8.0 之前的版本中,您可以对变量执行类似的操作。
推荐阅读
- java - 带有 Ehcache 3.x 的 Spring Boot 2.x - @Autowired 服务在自定义 CacheEventListener 中为空
- javascript - 如何使单击锚点等同于单击详细信息标签?
- regex - 正则表达式数据洞察排除 URL 参数
- rust - 可以在 Rust 中使用泛型类型的 trait 对象吗?
- jdbc - Gatling 使用 JDBC 馈送器通过 Windows 身份验证连接到 SQL Server 引发错误“java.lang.NoSuchMethodError”
- c++ - 带有 dll 的 C++ 可扩展应用程序
- java - 通过 curl 将 java 对象传递到 url
- r - 删除包含两个字符串和一个因子在 R 中出现一次或两次的列
- javascript - TypeError:无法从未定义中读取属性“值”。onEdit@ClosedTSR.gs:3
- git - “~”在 Bash 脚本字符串变量中的处理方式不同吗?