Sql 计算通过联接表返回的不同项数

Sql 计算通过联接表返回的不同项数,sql,sqlite,join,Sql,Sqlite,Join,我有3个表,用户、付款、付款类型 比如: 当加入表格来查询我得到的男人的报酬时 userID userName namePayment info 1 Tom Cash ball 1 Tom Cash book 1 Tom Check book 2 Kate Cash book 通过以下

我有3个表,
用户、付款、付款类型
比如:

当加入表格来查询我得到的男人的报酬时

userID  userName    namePayment     info
1       Tom         Cash            ball
1       Tom         Cash            book
1       Tom         Check           book
2       Kate        Cash            book
通过以下查询

SELECT u.userID ,u.userName, te.namePayment , e.info
FROM User u
  INNER JOIN Payment e 
     ON u.userID = e.idUser     
  INNER JOIN typePayment te 
     ON e.idTypePayment = te.typeID
 order by u.userID;
但是,我想计算一下向每个人支付的总类型的数量,如:

userID  userName    namePayment     info    noCash  noCheck  noBoth
1       Tom         Cash            ball        2         1       0
1       Tom         Cash            book        2         1       0
1       Tom         Check           book        2         1       0
2       Kate        Cash            book        1         0       0

怎么做?(请看一看,我正在使用SQLite)

为什么您希望一个用户有多行?而且,
noBoth
没有意义

此查询获取每个用户的不同付款类型:

SELECT u.userID, u.userName,
       SUM(CASE WHEN te.namePayment = 'Cash' THEN 1 ELSE 0 END) as NumCash,           
       SUM(CASE WHEN te.namePayment = 'Check' THEN 1 ELSE 0 END) as NumCheck,
       SUM(CASE WHEN te.namePayment IN ('Cash', 'Check' ) THEN 1 ELSE 0 END) as NumBoth
FROM User u INNER JOIN
     Payment e 
     ON u.userID = e.idUser INNER JOIN
     typePayment te 
     ON e.idTypePayment = te.typeID
GROUP BY u.userID;
ORDER BY u.userID;

如果您愿意,您可以将其加入到更详细的信息中,以添加每笔付款的列。

为什么您希望一个用户有多行?而且,
noBoth
没有意义

此查询获取每个用户的不同付款类型:

SELECT u.userID, u.userName,
       SUM(CASE WHEN te.namePayment = 'Cash' THEN 1 ELSE 0 END) as NumCash,           
       SUM(CASE WHEN te.namePayment = 'Check' THEN 1 ELSE 0 END) as NumCheck,
       SUM(CASE WHEN te.namePayment IN ('Cash', 'Check' ) THEN 1 ELSE 0 END) as NumBoth
FROM User u INNER JOIN
     Payment e 
     ON u.userID = e.idUser INNER JOIN
     typePayment te 
     ON e.idTypePayment = te.typeID
GROUP BY u.userID;
ORDER BY u.userID;

如果你真的喜欢,你可以将其加入到更详细的信息中,以添加每笔付款的列。

noBoth
是拥有
Cash
Check
的总和。noBoth是拥有
Cash
Check