【问题标题】:sum tabel based on certain content基于某些内容的求和表
【发布时间】:2021-01-13 23:26:30
【问题描述】:
select
om.orderno,
od.product,
od.preorderqty,
(od.preorderqty * od.nto) as preordernet
from OrderMaster om
join OrderDetail od on od.orderid = om.id
and ((od.prodcode like '100-%') or (od.prodcode like '200-%'))
order by om.orderno,sod.prodcode

当前结果:

ORDERNO PRODUCT PREORDERQTY PREORDERNET 
1000    100-A   2           200
1000    100-B   2           300
1000    100-C   1           450
2000    100-A   3           300
2000    100-B   1           150
2000    200-A   2           900
3000    200-A   1           450

我需要帮助来获得一个脚本:

  • 根据具体内容汇总订单
  • 订单可以包含以 300- 等开头的产品。

预期结果:

ORDERNO PRODUCT PREORDERQTY PREORDERNET ORDERNET
1000    100-A   2           200         950
1000    100-B   2           300         950
1000    100-C   1           450         950
2000    100-A   3           300         1350
2000    100-B   1           150         1350    
2000    200-A   2           900         1350
3000    200-A   1           450         450

【问题讨论】:

  • 好吧,你的 DBMS 是什么? SQL 只是一种查询语言,每个 DBMS 都有自己的方言。你能说出 ORDERNET 列计算的确切逻辑是什么吗?
  • 您的 SQL 出了什么问题 - 它返回的 Order 的数据以 100 或 200 开头。只需将其替换为 300 - (od.prodcode like '300-%')。您能否为“基于特定内容的总和”添加更多详细信息
  • 对不起,我会解释得更好一点。例如,订单 1000 可以包含产品 100-A、100-B 和 100-C,但也可以包含 300-A 等。我只想对每个订单以 100 或 200 开头的产品求和。
  • 该查询为您提供一切,除此之外,您只需要ORDERNET,它为您提供每个ORDERNO 的总和。我说的对吗?
  • @Sujitmohanty30,没错

标签: sql select group-by sum sql-order-by


【解决方案1】:

正如我从预期输出中了解到的那样,使用sum 作为窗口函数来获取它,

select om.orderno
      ,od.product
      ,od.preorderqty
      ,(od.preorderqty * od.nto) as preordernet
      ,sum(od.preorderqty * od.nto) over (partition by om.orderno) as ordernet
  from OrderMaster om
  join OrderDetail od 
    on od.orderid = om.id
     and ((od.prodcode like '100-%') 
       or (od.prodcode like '200-%'))
order by om.orderno,sod.prodcode

【讨论】:

  • 不幸的是,我无法使用它。我刚收到一个错误无效的令牌。动态 SQL 错误。 SQL 错误代码 = -104。令牌未知结束。
  • 这是标准 SQL,我不知道为什么它不起作用。我不知道Interbase Expert。它不支持窗口功能吗?如果没有,我想删除我的帖子
  • 啊,缺少一个括号。我更新了我的答案。现在可以试试吗?
  • @Patrik,在我更新我的答案后,你的运气好吗?
  • 很遗憾不是@Sujitmohanty30
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多