mysql - 如何在 MySQL 中创建列而不是连接字符串?
问题描述
我有一个查询:
SELECT
t.emp_number,
t.date_created,
GROUP_CONCAT(t.time_stamp) as punch
FROM attendance_copy t
WHERE t.attendance_status like "%Punch%"
GROUP BY t.date_created
order by date_created,time_stamp
结果集:
id date punch
IPPH0004 | 2021-10-01 | 01:00:00,09:26:03
IPPH0004 | 2021-10-02 | 08:00:00,11:00:00
而不是逗号分隔的单元格,我希望它作为一个列或单元格,如下所示:
id date in out
IPPH0004 | 2021-10-01 | 01:00:00 | 09:26:03
IPPH0004 | 2021-10-02 | 08:00:00 | 11:00:00
这可能吗?谢谢。
解决方案
如果您希望根据在每个组中找到多少行来增加列数,那么不,这是不可能的。SQL 的一个不可改变的特性是,您必须在查询开始执行之前指定选择列表中的列数,因此在它读取任何数据之前。所以列的列表是固定的,并且在读取行时不会动态扩展。
您可以在选择列表中创建多个表达式,与您希望在组中找到的一样多:
SELECT t.emp_number, t.date_created,
MAX(CASE rownum WHEN 1 THEN time_stamp END) AS in,
MAX(CASE rownum WHEN 2 THEN time_stamp END) AS out
FROM (
SELECT emp_number, date_created, time_stamp,
ROW_NUMBER() OVER (PARTITION BY date_created ORDER BY time_stamp) AS rownum
FROM attendance_copy) AS t
GROUP BY emp_number, date_created;
推荐阅读
- java - 自定义比较器不排序时间
- css - 使用 javascript 编辑 iframe 中元素的 css
- c# - C#“while”应该在有人输入正确答案后中断,但它没有
- kubernetes - Kubernetes 调用服务与集群集群中的大使公开-a 来自不同集群集群-b,相同的 prohect 但不同的 vpc
- .net-core - Asp net core SignalR websocket连接时间超过1秒
- apache - 语法错误,使用 fq(过滤查询)时无法从 lucene StandardQueryparser 解析
- android - 发现人工制品的本机依赖项
- next.js - 使用 Netlify 部署 Next.js 网站
- c# - HttpContent.ReadAsStringAsync 导致请求挂起
- cordova - 如何使用适用于 Apache Cordova 的 cordova-android 定位最广泛的 Android 设备?