简体   繁体   English

MySQL:同一字段上具有不同WHERE的多个SELECT,结果在单独的列中

[英]MySQL: Multiple SELECTs with different WHEREs on same field with result in separate columns

I have read numerous questions regarding similar scenarios but can't quite seem to find a solution. 我已经阅读了许多有关类似情况的问题,但似乎找不到解决办法。

I have the following query to get cumulated timetrackings (stop and start are UNIX timestamps) per user per calendar week, separated by type of timetracking (project time, driving time etc.) 我有以下查询来获取每个日历周每个用户的累积时间跟踪(停止和开始是UNIX时间戳),并按时间跟踪的类型(项目时间,行驶时间等)分开

SELECT 
u.login as Person,
DATE_FORMAT(FROM_UNIXTIME(t.start), '%x-%v') as CalendarWeek,
t.tracking_type as TrackingType,
REPLACE(ROUND(SUM(stop-start) / 60 / 60, 2), '.', ',') AS TimeHrs
FROM ps_time_tracking t
LEFT OUTER JOIN users u ON (u.id = t.user_id)
GROUP BY Person, CalendarWeek, TrackingType
ORDER BY CalendarWeek ASC, Person ASC

The result looks like this: 结果看起来像这样:

| Person | CalendarWeek | TrackingType | TimeHrs | 
| ------------------------------------------------
| User A | 2018-01      | project time | 31,82   | 
| User A | 2018-01      | driving time | 4,75    | 
| User B | 2018-01      | project time | 60,17   | 
| User B | 2018-01      | driving time | 9,02    | 
| User C | 2018-01      | project time | 7,33    |

The goal would be to put the result of multiple WHEREs such as 目的是将多个WHERE的结果放在

WHERE t.tracking_type = 'project time'
WHERE t.tracking_type = 'driving time'

in different result columns: 在不同的结果列中:

| Person | CalendarWeek | TrackingType | ProjectTime | DrivingTime |
| --------------------------------------------------------------------
| User A | 2018-01      | project time | 31,82       | 4,75        |
| User B | 2018-01      | project time | 60,17       | 9,02        |
| User C | 2018-01      | project time | 7,33        | (null)      |

Any help would be appreciated. 任何帮助,将不胜感激。

You can use CASE to get what you need. 您可以使用CASE获得所需的内容。 It would look something like this: 它看起来像这样:

SELECT 
u.login as Person,
DATE_FORMAT(FROM_UNIXTIME(t.start), '%x-%v') as CalendarWeek,
REPLACE(ROUND(SUM(CASE WHEN TrackingType = 'project time' THEN stop-start ELSE 0 END) / 60 / 60, 2), '.', ',') AS ProjectTime,
REPLACE(ROUND(SUM(CASE WHEN TrackingType = 'driving time' THEN stop-start ELSE 0 END) / 60 / 60, 2), '.', ',') AS DrivingTime
FROM ps_time_tracking t
LEFT OUTER JOIN users u ON (u.id = t.user_id)
GROUP BY Person, CalendarWeek
ORDER BY CalendarWeek ASC, Person ASC

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM