假设我的数据库是
id visit
用户可以访问 A 或 B。所以一些数据可能是
1 A
1 B
1 B
2 A
3 B
2 B
3 B
我想得到
id A B
1 1 2
2 1 1
3 0 2
我该怎么做呢?
假设我的数据库是
id visit
用户可以访问 A 或 B。所以一些数据可能是
1 A
1 B
1 B
2 A
3 B
2 B
3 B
我想得到
id A B
1 1 2
2 1 1
3 0 2
我该怎么做呢?
正确的方法是作为一个简单的聚合:
select id,
sum(case when visit = 'A' then 1 else 0 end) as A,
sum(case when visit = 'B' then 1 else 0 end) as B
from t
group by id
这将在 SQL Server 上完成。
这真的很奇怪,但是 stackoverflow 不允许我发布那个查询,所以我不得不发布一个屏幕抓取。
我会使用类似的东西:
SELECT v.user_id,
(SELECT COUNT(*) FROM visit vv WHERE vv.user_id = v.user_id AND vv.loc = 'A') as visitA,
(SELECT COUNT(*) FROM visit vv WHERE vv.user_id = v.user_id AND vv.loc = 'B') as visitB
FROM visit v
GROUP BY v.user_id
假设表被称为访问和字段“user_id”和“loc”。