如何在SQL Server中将行转换为列?

4
我有一个来自指纹传感器的表格,我需要将结果在一行中显示。
ID |  DateTime                | Flag
----------------------------------------
41 |  2017-02-22 08:05:56.000 | I
41 |  2017-02-22 18:11:03.000 | O

需要的结果应该像这样:
ID |  IN-DateTime             |  OUT-DateTime           
--------------------------------------------------------
41 |  2017-02-22 08:05:56.000 | 2017-02-22 18:11:03.000 

有人能帮忙吗?

2个回答

7
简单的聚合应该就可以了:
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;

或者,如果你愿意,你可以使用“pivot”功能:
select id, [I] indatetime, [O] outdatetime
from t pivot (
    max(datetime) for flag in ([I],[O])
) as p

2

或者您可以使用 PIVOT,它专门开发用于将 ROWS 转化为 COLUMNS

SELECT id
     , [I] as [IN-DateTime]
     , [O] as [OUT-DateTime]
FROM Table t
PIVOT (max(dateTime) for flag in ([I], [O])) as pvt;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接