这是我当前的mysql表的样子:
PunchID EmpID PunchEvent PunchDateTime
1 0456 clockin 5/14/2013 8:36:26 AM
48 0456 breakout 5/14/2013 12:01:29 PM
53 0456 breakin 5/14/2013 12:28:31 PM
54 0456 clockout 5/14/2013 2:28:33 PM
57 0456 clockin 5/15/2013 7:38:34 AM
58 0456 breakout 5/15/2013 7:38:39 AM
59 0456 breakin 5/15/2013 7:38:41 AM
60 0456 clockout 5/15/2013 7:38:42 AM
现在,我想返回基于星期几进行分组的结果集,如下所示:
Day ClockIn BreakOut BreakIn ClockOut
Tuesday 8:36:26 AM 12:01:29 PM 12:28:31 PM 2:28:33 PM
Wednesday 7:38:34 AM etc, etc...
这是我当前的查询。但它只返回每天的第一打。
SELECT DATE_FORMAT(PunchDateTime, '%W') as day, PunchEvent, DATE_FORMAT(PunchDateTime, '%l:%m:%s %p') as time FROM timeclock_punchlog WHERE EmpID = '0456' GROUP BY DATE(PunchDateTime) ORDER BY PunchDateTime ASC;
有人可以帮我弄这个吗?谢谢迈克
SELECT DATE_FORMAT(PunchDateTime, '%W') DAY,
MAX(CASE WHEN PunchEvent = 'ClockIn' THEN DATE_FORMAT(PunchDateTime, '%r') END) ClockIn,
MAX(CASE WHEN PunchEvent = 'BreakOut' THEN DATE_FORMAT(PunchDateTime, '%r') END) BreakOut,
MAX(CASE WHEN PunchEvent = 'BreakIn' THEN DATE_FORMAT(PunchDateTime, '%r') END) BreakIn,
MAX(CASE WHEN PunchEvent = 'ClockOut' THEN DATE_FORMAT(PunchDateTime, '%r') END) ClockOut
FROM tableName
WHERE EmpID = 456
GROUP BY DATE_FORMAT(PunchDateTime, '%W')
ORDER BY PunchDateTime
输出值
╔═══════════╦═════════════╦═════════════╦═════════════╦═════════════╗
║ DAY ║ CLOCKIN ║ BREAKOUT ║ BREAKIN ║ CLOCKOUT ║
╠═══════════╬═════════════╬═════════════╬═════════════╬═════════════╣
║ Tuesday ║ 08:36:26 AM ║ 12:01:29 PM ║ 12:28:31 PM ║ 02:28:33 PM ║
║ Wednesday ║ 07:38:34 AM ║ 07:38:39 AM ║ 07:38:41 AM ║ 07:38:42 AM ║
╚═══════════╩═════════════╩═════════════╩═════════════╩═════════════╝
问题内容: 如何在MySQL查询中将行转换为列? 问题答案: 您可以使用将行转换 为 列,但不能以任何自动方式转置整个结果集。您可以编写一个查询来手动生成每个列,或者在应用程序中执行。 这是有关编写复杂查询以模拟换位的教程: http://www.artfulsoftware.com/infotree/queries.php#78
问题内容: 我有一个简单的查询,它产生以下结果: 我想将行转置为列。 我了解mysql没有枢轴功能,因此需要工会,但不能100%确定。 先谢谢您的帮助。 问题答案: 您可以使用这样的交叉表来做到这一点- 另外,您应该将transporttype值移动到查找表中,并在该表中包含transporttype_id。
问题内容: 我的表中有一行我不想更改(曾经)。 是否可以将MySQL行设置为READ-ONLY,以便不能以任何方式更新它?如果是这样,怎么办? 如果不是,是否可以在该行的某一列中设置一个永久值,以使其无法更改?如果是这样,怎么办? 谢谢。 问题答案: 这可能是业务逻辑,可能不属于您的数据存储层。但是,仍然可以使用触发器来实现。 如果将要更新“锁定”记录,则可以创建引发错误的触发器;由于 在执行 该
问题内容: 我正在尝试转置非常基本的输出以用于Web应用程序。由于我的优势还在于mysql,因此,我想在它到达应用程序之前就做到这一点。 我目前拥有的是: 我想要的是: 我的SQL是: 我已经在网上进行了大量研究,但我找不到解决此问题的好方法。这将是动态的,因为日期每天都会更改。 问题答案: 这是一个动态sql,用于透视记录, SQLFiddle演示
我有一张如下的桌子: 如何将其转换为:
问题内容: 一个菜鸟MYSQL用户....我有一个简单的MySQL查询,该查询返回值,并使用GROUP_CONCAT函数: 但是,我需要转置查询,以便它以单独的列而不是行的形式返回“名称”。MySQL完全有可能吗? 问题答案: 您需要执行一项操作,MySQL本身不支持该操作(与某些其他RDBMS不同)。 您可以获得的最接近的结果是按照以下几行构造SQL: 如果可能的值是动态的,则可以从以下结果中以