SQL将多行转换为一行
这似乎是一项容易的任务,但我似乎不能全神贯注于此 我只需要找出,每天使用手机的用户,使用桌面的用户和同时使用这两种设备的用户。每个用户/访问\u dt组合只能产生一行 示例数据如下:SQL将多行转换为一行,sql,postgresql,pivot,Sql,Postgresql,Pivot,这似乎是一项容易的任务,但我似乎不能全神贯注于此 我只需要找出,每天使用手机的用户,使用桌面的用户和同时使用这两种设备的用户。每个用户/访问\u dt组合只能产生一行 示例数据如下: USER, ACCESS_DATE, FORMFACTOR 1 01-01-2014 Mobile 1 01-01-2014 Desktop 2 01-01-2014 Mobile 3 01-01-2014 Desktop 期望输出:
USER, ACCESS_DATE, FORMFACTOR
1 01-01-2014 Mobile
1 01-01-2014 Desktop
2 01-01-2014 Mobile
3 01-01-2014 Desktop
期望输出:
USER, ACCESS_DATE, KEY_MOBILE, KEY_DESKTOP, KEY_MOBILE_DESKTOP
1 01-01-2014 1 1 1
2 01-01-2014 1 0 0
3 01-01-2014 0 1 0
多谢各位 这基本上是一个pivot查询。我会使用条件聚合来实现这一点:
select user, access_date,
max(case when FORMFACTOR = 'Mobile' then 1 else 0 end) as KEY_MOBILE,
max(case when FORMFACTOR = 'Desktop' then 1 else 0 end) as KEY_DESKTOP,
(case when max(case when FORMFACTOR = 'Mobile' then 1 else 0 end) > 0 and
max(case when FORMFACTOR = 'Desktop' then 1 else 0 end) > 0
then 1 else 0
end) as KEY_MOBILE_DESKTOP
from table t
group by user, access_date;
这基本上是一个pivot查询。我会使用条件聚合来实现这一点:
select user, access_date,
max(case when FORMFACTOR = 'Mobile' then 1 else 0 end) as KEY_MOBILE,
max(case when FORMFACTOR = 'Desktop' then 1 else 0 end) as KEY_DESKTOP,
(case when max(case when FORMFACTOR = 'Mobile' then 1 else 0 end) > 0 and
max(case when FORMFACTOR = 'Desktop' then 1 else 0 end) > 0
then 1 else 0
end) as KEY_MOBILE_DESKTOP
from table t
group by user, access_date;
哇,太快了。谢谢。很确定,这就是我需要的。哇,太快了。谢谢。很确定,这就是我需要的。