复杂查询

gallardo 2010-04-15 04:07:41
产品交易表A:

产品 日期 数量
....
AAA 2010-01-01 100
AAA 2010-01-10 -50
BBB 2010-01-01 300
BBB 2010-01-10 -150
....

我想通过一个日期范围来查询得到下面的结果:

产品 期初结存 入库 出库 期末结存

比如输入条件2010-1-1至2010-1-31。能够查出产品在2010-1-1前的结余数量,以及1月份出库、入库的数量,以及1月底当天还剩多少数量。
...全文
157 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiantian789456 2010-04-17
  • 打赏
  • 举报
回复
学习了。
gallardo 2010-04-17
  • 打赏
  • 举报
回复
好像是SQL Server的写法,Oracle通不过。
羽蓝 2010-04-17
  • 打赏
  • 举报
回复
学习了。
SambaGao 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wildwave 的回复:]

select 产品,sum(case when 日期<'2010-01-01' then 数量 end) "月初结余",
sum(case when 日期 between '2010-01-01' and '2010-01-31' and 数量<0 then 数量 end)"出库",
sum(case when 日期 between '2010-01-01' and '2010-01……
[/Quote]

强大。。。
gallardo 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 crazylaa 的回复:]

水晶报表查询表数据的时候,调用一下上面那个sql,把结果弄进去显示就完了。
[/Quote]

我是说不用SQL命令的方式,应该也有办法的吧
aa332073044 2010-04-17
  • 打赏
  • 举报
回复
SELECT 产品,
SUM(CASE WHEN 数量 > 0 THEN 数量 ELSE 0 END) 入库,
SUM(CASE WHEN 数量 < 0 THEN 数量 ELSE 0 END) 出库
FROM 交易表A
WHERE to_char(日期,'yyyy-mm-dd') >= '2010-01-01' and to_char(日期,'yyyy-mm-dd') <= '2010-01-31' GROUP BY 产品) a,
(SELECT 产品, SUM(数量) 结余 FROM 交易表A
WHERE to_char(日期,'yyyy-mm-dd') > '2010-1-1' GROUP BY 产品
zhangwonderful 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wildwave 的回复:]

select 产品,sum(case when 日期<'2010-01-01' then 数量 end) "月初结余",
sum(case when 日期 between '2010-01-01' and '2010-01-31' and 数量<0 then 数量 end)"出库",
sum(case when 日期 between '2010-01-01' and '2010-01……
[/Quote]
赞成此方案
gallardo 2010-04-16
  • 打赏
  • 举报
回复
高手果然多啊,顺便问一下如果在水晶报表里实现该怎么个做法?(不用SQL命令的方式)
crazylaa 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gallardo 的回复:]

高手果然多啊,顺便问一下如果在水晶报表里实现该怎么个做法?(不用SQL命令的方式)
[/Quote]
水晶报表查询表数据的时候,调用一下上面那个sql,把结果弄进去显示就完了。
zhufenghappy 2010-04-16
  • 打赏
  • 举报
回复
呵呵,一句话就能解决问题,其实sql功能是相当强大的,只要灵活运用好,基本都能解决!
tangren 2010-04-15
  • 打赏
  • 举报
回复
WHERE 日期 BETWEEN DATE '2010-1-1' AND DATE DATE '2010-1-31' + 1
上面这行多了一个DATE
tangren 2010-04-15
  • 打赏
  • 举报
回复
SELECT b.产品, b.结余, a.入库, a.出库, b.结余 + a.入库 - a.出库 剩余数量
FROM (SELECT 产品,
SUM(CASE WHEN 数量 > 0 THEN 数量 ELSE 0 END) 入库,
SUM(CASE WHEN 数量 < 0 THEN 数量 ELSE 0 END) 出库
FROM 交易表A
WHERE 日期 BETWEEN DATE '2010-1-1' AND DATE DATE '2010-1-31' + 1
GROUP BY 产品) a,
(SELECT 产品, SUM(数量) 结余 FROM 交易表A WHERE 日期 < DATE '2010-1-1' GROUP BY 产品) b
WHERE a.产品(+) = b.产品;
小灰狼W 2010-04-15
  • 打赏
  • 举报
回复
select 产品,sum(case when 日期<'2010-01-01' then 数量 end) "月初结余",
sum(case when 日期 between '2010-01-01' and '2010-01-31' and 数量<0 then 数量 end)"出库",
sum(case when 日期 between '2010-01-01' and '2010-01-31' and 数量>0 then 数量 end)"入库",
sum(数量)"月底数"
from table1
where 日期<='2010-01-31'
group by 产品
fxianxian 2010-04-15
  • 打赏
  • 举报
回复
还是有些疑问:
1.期初结存和期末结存的计算公式能不能提供下?
2.入库:数量为正数时就表示入库吗?出库:数量为负数时就表示出库吗?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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