Comment convertir des lignes en colonnes dans SQL Server?

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;