问个SQL,有点难?谢谢

520NET 2011-05-14 10:28:07
表TEST:
ID(主键) 姓名 消费 日期 退休标志(1、在岗 2、退休)
004 张三 20 2010-05-11 1
007 李四 50 2010-06-23 1
002 王五 10 2010-06-23 2
004 张三 100 2010-07-20 2
按退休标志分组,统计消费人次和金额,结果为:
退休标志 消费人次 消费
1 1 50
2 3 130
注:张三在2010-07-20已退休,之前的在岗消费则以退休来统计人次和消费金额。
...全文
111 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhuizhouhb 2011-05-16
  • 打赏
  • 举报
回复
楼上正解
tangren又被你抢先了!
呵呵!
同时谢谢你给我发的信息
520NET 2011-05-14
  • 打赏
  • 举报
回复
不是我要的答案,不过谢谢你!

注:张三在2010-07-20已退休,之前的在岗消费则以退休来统计人次和消费金额。
asggadfgadfg 2011-05-14
  • 打赏
  • 举报
回复
select 退休标志,count(id) 消费人次,sum(消费) 消费
from test
group by 退休标志
tangren 2011-05-14
  • 打赏
  • 举报
回复
with test as (
select '004' id, '张三' name, 20 amount, date'2010-05-11' pdate, 1 flag from dual union all
select '007' id, '李四' name, 50 amount, date'2010-06-23' pdate, 1 flag from dual union all
select '002' id, '王五' name, 10 amount, date'2010-06-23' pdate, 2 flag from dual union all
select '004' id, '张三' name, 100 amount, date'2010-07-20' pdate, 2 flag from dual)

SELECT newflag flag, COUNT(*) cnt, SUM(amount) amount
FROM (SELECT t.*,
CASE
WHEN (SELECT COUNT(*)
FROM test a
WHERE a.id = t.id
AND a.flag = 2) > 0 THEN
2
ELSE
1
END newflag
FROM test t)
GROUP BY newflag;
long95wang 2011-05-14
  • 打赏
  • 举报
回复
我是初学者,问个问题
你那个表TEST的主键,怎么是2个004,主键不是唯一的吗?

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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