J'ai cette table du capteur d'empreintes digitales et je dois montrer le résultat dans une rangée
ID | DateTime | Flag ---------------------------------------- 41 | 2017-02-22 08:05:56.000 | I 41 | 2017-02-22 18:11:03.000 | O
Résultat nécessaire comme ceci:
ID | IN-DateTime | OUT-DateTime -------------------------------------------------------- 41 | 2017-02-22 08:05:56.000 | 2017-02-22 18:11:03.000
Quelqu'un peut-il m'aider ?
L'agrégation simple devrait faire:
select id, max(case when flag = 'I' then datetime end) indatetime, max(case when flag = 'O' then datetime end) outdatetime from t group by id;
Ou si vous voulez, vous pouvez utiliser le pivot:
select id, [I] indatetime, [O] outdatetime from t pivot ( max(datetime) for flag in ([I],[O]) ) as p
Alternativement, vous pouvez utiliser PIVOT
, qui a été développé spécifiquement pour transformer ROWS
en COLUMNS
.
SELECT id , [I] as [IN-DateTime] , [O] as [OUT-DateTime] FROM Table t PIVOT (max(dateTime) for flag in ([I], [O])) as pvt;