表1:
bookid type
1 A
2 B
3 A
表2
recordid bookid
1 1
1 2
1 3
有没有办法让输出为
recordid count(A) count(B)
1 2 1
我尝试通过左边连接两个表进行分组,但这样可以得到如下输出:
recordid type count
1 A 2
1 B 1
请建议获得所需输出的最佳方式。
答案 0 :(得分:0)
你可以试试这个:
SELECT
t2.recordid,
count(CASE WHEN t1.type='A' THEN 1 ELSE NULL END) as CountA,
count(CASE WHEN t1.type='B' THEN 1 ELSE NULL END) as CountB,
FROM Table1 t1
INNER JOIN Table2 t2 on t1.bookid=t2.bookid
GROUP BY t2.recordid
答案 1 :(得分:0)
您也可以将SUM()
与表达式一起使用,使用带表达式的sum将得到一个布尔值1和0,您可以根据条件得到计数
SELECT
t2.recordid,
SUM( t1.type='A') `CountA`,
SUM( t1.type='B') `CountB`,
FROM Table1 t1
JOIN Table2 t2 USING(bookid)
GROUP BY t2.recordid
答案 2 :(得分:0)
如果您有限制列类型值,我认为很容易做到。但是如果你有这么多的列类型值,似乎只有一种方法是用光标做的过程。