-5

假设我的数据库是

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

我该怎么做呢?

4

3 回答 3

1

正确的方法是作为一个简单的聚合:

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
于 2013-06-18T01:52:41.417 回答
0

这将在 SQL Server 上完成。

在此处输入图像描述

这真的很奇怪,但是 stackoverflow 不允许我发布那个查询,所以我不得不发布一个屏幕抓取。

于 2013-06-18T00:55:48.150 回答
0

我会使用类似的东西:

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”。

于 2013-06-18T00:59:07.253 回答