0

レポートを自動的に作成するために、毎日の時間レコードのデータをグループ化および並べ替えるのに問題があります。次のようなテーブル構造DTR

ログ日付ログ時間従業員名ログタイプ
2012年9月13日17:00:00SALITA、LYNYRDANTONIOログアウト
2012年9月13日8:05:00SALITA、LYNYRD ANTONIO LOGIN
2012年9月12日17:05:00SALITA、LYNYRDANTONIOログアウト
2012年9月12日8:05:00SALITA、LYNYRD ANTONIO LOGIN
2012年7月10日17:00:00GARCIA、ALVIN LOGOUT
2012年7月10日17:00:00AURENO、LEAH LOGOUT
2012年7月10日17:00:00SALITA、LYNYRDANTONIOログアウト
2012年7月10日17:00:00CANSINO、PAUL LOGOUT
2012年7月10日17:00:00BELO、RIO LOGOUT
2012年7月10日17:00:00MAG-ISA、MAYBELLE LOGOUT
2012年7月10日17:00:00TARINE、KAREN LOGOUT
2012年7月10日17:00:00REYES、ANDREA LOGOUT
2012年7月10日17:00:00NAVARRO、クリスティーナログアウト
2012年7月10日10:30:00MAG-ISA、MAYBELLE LOGIN
2012年7月10日8:00:00SALITA、LYNYRD ANTONIO LOGIN
2012年7月10日8:00:00CANSINO、PAUL LOGIN
2012年7月10日8:00:00BELO、RIO LOGIN
2012年7月10日7:40:00AURENO、LEAH LOGIN
2012年7月10日7:30:00ガルシア、アルビンログイン
2012年7月10日7:25:00TARINE、KAREN LOGIN
2012年7月10日7:10:00NAVARRO、KRISTINA LOGIN
2012年7月10日7:10:00REYES、ANDREA LOGIN

次のような出力を持つクエリとして処理されるようにします。

ログ日付従業員名LOGINLOGOUT
2012年9月13日SALITA、LYNYRD ANTONIO 8:05:00 17:00:00
2012年9月12日SALITA、LYNYRD ANTONIO 8:05:00 17:05:00
2012年7月10日ガルシア、アルビン7:30:00 17:00:00
2012年7月10日アウレノ、リー7:40:00 17:00:00
2012年7月10日SALITA、LYNYRD ANTONIO 8:00:00 17:00:00
2012年7月10日CANSINO、ポール8:00:00 17:00:00
2012年7月10日BELO、RIO 8:00:00 17:00:00
2012年7月10日MAG-ISA、MAYBELLE 10:30:00 17:00:00
2012年7月10日タリーヌ、カレン7:25:00 17:00:00
2012年7月10日REYES、ANDREA 7:10:00 17:00:00
2012年7月10日ナバロ、クリスティーナ7:10:00 17:00:00

どうすればこれを達成できますか?

4

2 に答える 2

2

これはあなたが取得しようとしているものです:

SELECT DATE_FORMAT(LogDate, '%d/%c/%Y') AS LogDate, EmployeeName,
   (GROUP_Concat(CASE LogType WHEN 'LOGIN' THEN LogTime END)) AS LOGIN,
   (GROUP_Concat(CASE LogType WHEN 'LOGOUT' THEN LogTime END)) AS LOGOUT
FROM myTable
GROUP BY LogDate, EmployeeName
ORDER BY LogDate desc;

このSQLFiddleを参照してください

クエリの説明:

ステートメントを使用CASEして行を列に変換します(LoginおよびLogout

SELECT DATE_FORMAT(LogDate, '%d/%c/%Y') AS LogDate, EmployeeName,
   (CASE LogType WHEN 'LOGIN' THEN LogTime END) AS LOGIN,
   (CASE LogType WHEN 'LOGOUT' THEN LogTime END) AS LOGOUT
FROM myTable
GROUP BY LogDate, EmployeeName, LogTime
ORDER BY LogDate desc;

しかし、これはあなたがこのSQLFiddleで好きになる結果になります。

GROUP_CONCATしたがって、 (MySQL)を使用して、句に参加LogTimeしたり、句からNULL削除したりする必要があります。LogTimeGROUP BY

于 2012-09-13T08:22:36.777 に答える
0
Select  Log Date,   Employee Name,       LOGIN       LOGOUT 
    case(Log Type)
    when 'LOGIN' then Log Time AS LOGIN
    Else 
    Log Time AS LOGOUT
    End
From
YOUR_TABLE
order by Log Date desc
于 2012-09-13T08:05:44.563 に答える