SQL 一对多查询求助,大神快来!!!

qq_37374668 2017-07-27 09:56:35
是这样的,我要做个统计,麻烦大家帮忙看看 ,在这里先谢谢大家
A表
id code
1 code1
1 code2
1 code3

B表
code num type
code1 100 1
code1 100 1
code1 50 0
code2 100 1
code3 90 1

最后效果
code分组 type=1 的 num合 type=0 的 num合
code1 200 50
code2 100 0
code3 90 0

...全文
194 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
风中的千纸鹤 2017-07-27
  • 打赏
  • 举报
回复
引用 5 楼 mayanzs 的回复:

select code,sum(decode(type,1,num,0)) as num_1,sum(decode(type,0,num,0)) num_0 from B group by code order by 1;
这个才是正解,一般不建议用case when,不然一条语句写下来,全是case when了
Bad_Milo_ 2017-07-27
  • 打赏
  • 举报
回复
引用 6 楼 qq_37374668 的回复:
[quote=引用 4 楼 Bad_Milo_ 的回复:] 另 大兄弟你这个A表没啥用啊,如果必须用的话告诉我你想干什么拿它,我再给你改。
先谢谢这位兄弟,其实 A表 还有个sum 字段 是总费用 也要显示出来 刚才你那给我的语句我执行了,结果还差了点,他只统计出了 code 在 B 表 type 0 和 1 都有的 比如 code 1 在B表只有一条记录 type 为 0 结果不显示 code 1 的這条记录 , [/quote]

SELECT b.*,a.sum FROM a LEFT JOIN(
SELECT
	a. CODE,
	(
		CASE
		WHEN t1 IS NULL THEN
			0
		ELSE
			t1
		END
	) "type为1",
	(
		CASE
		WHEN t0 IS NULL THEN
			0
		ELSE
			t0
		END
	) "type为0"
FROM
	(SELECT * FROM b GROUP BY CODE) a
LEFT JOIN (
	SELECT
		CODE,
		sum(num) t1
	FROM
		b
	WHERE
		type = "1"
	GROUP BY
		CODE
) b ON a. CODE = b. CODE
LEFT JOIN (
	SELECT
		CODE,
		sum(num) t0
	FROM
		b
	WHERE
		type = "0"
	GROUP BY
		CODE
) c ON a. CODE = c. CODE) b on a.code= b.code
我根据A表的code查B表数据了那
qq_37374668 2017-07-27
  • 打赏
  • 举报
回复
引用 4 楼 Bad_Milo_ 的回复:
另 大兄弟你这个A表没啥用啊,如果必须用的话告诉我你想干什么拿它,我再给你改。
先谢谢这位兄弟,其实 A表 还有个sum 字段 是总费用 也要显示出来 刚才你那给我的语句我执行了,结果还差了点,他只统计出了 code 在 B 表 type 0 和 1 都有的 比如 code 1 在B表只有一条记录 type 为 0 结果不显示 code 1 的這条记录 ,
mayanzs 2017-07-27
  • 打赏
  • 举报
回复

select code,sum(decode(type,1,num,0)) as num_1,sum(decode(type,0,num,0)) num_0 from B group by code order by 1;
Bad_Milo_ 2017-07-27
  • 打赏
  • 举报
回复
另 大兄弟你这个A表没啥用啊,如果必须用的话告诉我你想干什么拿它,我再给你改。
Bad_Milo_ 2017-07-27
  • 打赏
  • 举报
回复

SELECT
	a.*,
(case WHEN t0 is NULL then 0 ELSE t0 END)"type为0"
FROM
	(
		SELECT
			CODE,
			sum(num) "type为1"
		FROM
			b
		WHERE
			type = "1"
		GROUP BY
			CODE
	) a
LEFT JOIN (
	SELECT
		CODE,
		sum(num) t0
	FROM
		b
	WHERE
		type = "0"
	GROUP BY
		CODE
) b on a.code = b.code
qq_37374668 2017-07-27
  • 打赏
  • 举报
回复
引用 1 楼 u012556249 的回复:
select distinct(code) from B union select sum(num) from B where type=1 group by code union select sum(num) from B where type=0 group by code;
你这种对我没用啊,我要的是3列 效果 你这是查询结果集拼接啊
风中的千纸鹤 2017-07-27
  • 打赏
  • 举报
回复
select distinct(code) from B union select sum(num) from B where type=1 group by code union select sum(num) from B where type=0 group by code;
Bad_Milo_ 2017-07-27
  • 打赏
  • 举报
回复
引用 8 楼 u012556249 的回复:
[quote=引用 5 楼 mayanzs 的回复:]

select code,sum(decode(type,1,num,0)) as num_1,sum(decode(type,0,num,0)) num_0 from B group by code order by 1;
这个才是正解,一般不建议用case when,不然一条语句写下来,全是case when了[/quote] 额,刚接触不久,电脑没有oracle,用mysql写的,请问mysql有类似decode这种函数吗,准备装个oracle客户端在自己电脑玩
qq_37374668 2017-07-27
  • 打赏
  • 举报
回复
引用 8 楼 u012556249 的回复:
[quote=引用 5 楼 mayanzs 的回复:]

select code,sum(decode(type,1,num,0)) as num_1,sum(decode(type,0,num,0)) num_0 from B group by code order by 1;
这个才是正解,一般不建议用case when,不然一条语句写下来,全是case when了[/quote] 这个挺清晰的,
qq_37374668 2017-07-27
  • 打赏
  • 举报
回复
引用 5 楼 mayanzs 的回复:

select code,sum(decode(type,1,num,0)) as num_1,sum(decode(type,0,num,0)) num_0 from B group by code order by 1;
正解!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧