SQL多行成一个(SQL multiple rows into one)

2019-09-26 08:17发布

这似乎是一件容易的事,但我似乎无法环绕它我的头。

我只需要找出,用户所使用的手机,所使用的桌面和使用这两种,在日常工作中的用户。 每个用户/ access_dt组合应导致只有1行。

实施例的数据是以下内容:

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

非常感谢你!

Answer 1:

这是一个支点查询,基本上是这样。 我想有条件聚集做到这一点:

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;


文章来源: SQL multiple rows into one