找回密码
 立即注册

QQ登录

只需一步,快速开始

一颗葡萄籽儿

中级会员

40

主题

122

帖子

604

积分

中级会员

积分
604
一颗葡萄籽儿
中级会员   /  发表于:2020-2-8 23:34  /   查看:3665  /  回复:11
1金币
本帖最后由 一颗葡萄籽儿 于 2020-2-8 23:38 编辑

sum(b.收费金额)BBB 的条件是 b.收费类别=2.  用where怎么写。如果不能用where 是用case when吗还是其他?

SELECT
a.日期,a.姓名,
sum(b.收费金额)AAA,sum(b.收费金额)BBB

from
"客户信息" as a inner join"收费项目" as b on a.id=b.客户信息_id

where
b.收费类别=1

group by b.客户信息_id;

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

WITH CTE1 AS ( Select 客户信息_id,收费金额 FROM "收费项目" where 收费类型 = "2" ), CTE2 AS ( Select 客户信息_id,收费金额 FROM "收费项目" where 收费类型 = "1" ) Select a.日期,a.姓名, SUM(CTE2.收费金额) as AAA, SUM(CTE1.收费金额) as BBB FROM "客户信息" AS a LEFT JOIN CTE1 ON a.id = CTE2.客户信息_id LEFT JOIN CTE2 ON a.id = CTE1.客户信息_id GROUP BY a.id

11 个回复

倒序浏览
最佳答案
最佳答案
cg6207悬赏达人认证 活字格认证
金牌服务用户   /  发表于:2020-2-8 23:34:54
来自 4#
WITH CTE1 AS (
Select 客户信息_id,收费金额 FROM "收费项目" where 收费类型 = "2" ),

CTE2 AS (
Select 客户信息_id,收费金额 FROM "收费项目" where 收费类型 = "1" )

Select a.日期,a.姓名,
SUM(CTE2.收费金额) as AAA,
SUM(CTE1.收费金额) as BBB

FROM "客户信息" AS a
LEFT JOIN CTE1 ON a.id = CTE2.客户信息_id
LEFT JOIN CTE2 ON a.id = CTE1.客户信息_id
GROUP BY a.id

评分

参与人数 1金币 +300 收起 理由
Simon.hu + 300 很给力!

查看全部评分

回复 使用道具 举报
Eric.Liang讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2020-2-10 09:55:13
2#
没有太理解你的视图的作用,现在的问题是加了where没有作用?还是什么

其次,如果加了where,你的AAA  和  BBB都会受到这个where条件的影响,这是你想要的么?
回复 使用道具 举报
cg6207悬赏达人认证 活字格认证
金牌服务用户   /  发表于:2020-2-10 11:57:37
3#
case when then else 在视图内特别费性能
不推荐使用,推荐先分组,再统计,如下帖。
回复 使用道具 举报
cg6207悬赏达人认证 活字格认证
金牌服务用户   /  发表于:2020-2-10 12:07:09
5#
也就是说你想汇总子表里面类似应收和实收的值展现出来吧?
按照我给你的办法改就好了
然后你的理解不对,应该是主表的id进行group by 分类,而不是子表的客户信息_id
回复 使用道具 举报
一颗葡萄籽儿
中级会员   /  发表于:2020-2-10 12:08:09
6#
cg6207 发表于 2020-2-10 12:07
也就是说你想汇总子表里面类似应收和实收的值展现出来吧?
按照我给你的办法改就好了
然后你的理解不对, ...

对,就是那个意思,非常感谢您解答。
回复 使用道具 举报
LukeLiu
超级版主   /  发表于:2020-2-10 12:15:41
7#
一颗葡萄籽儿 发表于 2020-2-10 12:08
对,就是那个意思,非常感谢您解答。

把最佳答案送给楼上的格友吧!
感谢大佬的支持
回复 使用道具 举报
一颗葡萄籽儿
中级会员   /  发表于:2020-2-10 12:26:12
8#
cg6207 发表于 2020-2-10 12:04
WITH CTE1 AS (
Select 客户信息_id,收费金额 FROM "收费项目" where 收费类型 = "2" ),

WITH CTE1 AS (
Select 客户信息_id,收费金额 FROM "收费项目" where 收费类型 = "2" ),

收费类型=2 或者3  或者4   这么写对吗 where 收费类型 = "2" or where 收费类型 = "3" or where 收费类型 = "4"
回复 使用道具 举报
一颗葡萄籽儿
中级会员   /  发表于:2020-2-10 12:59:57
9#
LukeLiu 发表于 2020-2-10 12:15
把最佳答案送给楼上的格友吧!
感谢大佬的支持

okya
回复 使用道具 举报
cg6207悬赏达人认证 活字格认证
金牌服务用户   /  发表于:2020-2-10 13:49:12
11#
一颗葡萄籽儿 发表于 2020-2-10 12:26
WITH CTE1 AS (
Select 客户信息_id,收费金额 FROM "收费项目" where 收费类型 = "2" ),

这种多条件的可以写成
where 收费类型 >=2 and 收费类型 <=4
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部