我有这种形式的表数据。
it w count
i1 a 2
i1 b 3
i2 a 1
i3 c 2
i4 b 1
当我为每个项目(它)和相应的计数查询a-b对时。如果某个项目(它)没有a和b,那么它将被忽略(如i3)。我需要以
的形式输出it a b
i1 2 3
i2 1 0
i4 0 1
任何想法如何解决这个问题? 而且我不能将每个单词存储在不同的列中。这个矩阵有很多单词和mXn矩阵是稀疏的。
根据Saharsh的回答,我们可以通过
来完成SELECT * FROM (SELECT a.it, SUM(CASE WHEN a.w = 'a' THEN a.count ELSE 0 END) AS a,
SUM(CASE WHEN a.w = 'b' THEN a.count ELSE 0 END) AS b
FROM tableA a WHERE a.w IN ('a', 'b') GROUP BY a.it) WHERE a>0 OR b>0
处理数百万行的数据有更好的方式吗?
答案 0 :(得分:0)
您可以使用条件聚合执行此操作:
select it, max(case when w = 'a' then count else 0 end) as a,
max(case when w = 'b' then count else 0 end) as b
from table t
where w in ('a', 'b')
group by it;
答案 1 :(得分:0)
试试这个:
SELECT a.it,
SUM(CASE WHEN a.w = 'a' THEN a.count ELSE 0 END) AS a,
SUM(CASE WHEN a.w = 'b' THEN a.count ELSE 0 END) AS b
FROM tableA a
WHERE a.w IN ('a', 'b')
GROUP BY a.it;
<强>输出强>
| IT | A | B |
|----|---|---|
| i1 | 2 | 3 |
| i2 | 1 | 0 |
| i4 | 0 | 1 |