-2

我有一个逻辑问题来计算这个表的最终值:

https://i.stack.imgur.com/YPXXX.png

我需要计算每一行,列TIPO的值为“E”+1,对于“S”-1,按列CodigoConfiguracao.

基本上,我需要一个简单的库存控制,列CodigoConfiguracao是产品列控制,并且TIPO是运动类型,S = OUT 和 E = IN

谁能给我一盏灯?

4

2 回答 2

1

未经测试,但也许这个

select SUM(t1.TipoNumeric), t1.CODIGO, t1.CONFIGURACAO from (
   select 
       case (TIPO)
           when 'E' then 1
           when 'S' then -1
           else 0
       end as TipoNumeric,
       CODIGO,
       CONFIGURACAO
   from MyTable
) as t1
group by t1.CODIGO, t1.CONFIGURACAO
于 2021-09-17T13:43:40.857 回答
0

只需添加 +1/-1 列,也许?

alter table MyTable 
  add tipo_val computed by
  (  
    decode( upper(TIPO), 'E', +1, 'S', -1 )
  )

进而:

Select * from MyTable;

Select SUM(tipo_val), CODIGO, CONFIGURACAO
From MyTable
Group by 2, 3

PS不要用图片来展示你的数据。

而是将它们作为脚本放入http://dbfiddle.uk/?rdbms=firebird_3.0,然后使用 Markdown Export 将数据和超链接复制到您的问题文本中。

PPS 我相信你的整个方法在那里是错误的,如果“需要一个简单的库存控制”。

我认为你的表应该有这样的列:

  • 代理行 ID,primary key自动递增整数,32 位或 64 位

  • 标识您的项目的列,通常它是一个单一的替代整数 SKU(库存单位)引用(参见 - 外键)另一个“字典表”。在您的情况下,它似乎是两列CodigoConfiguracao但这也意味着您不能添加有关您的商品的额外信息(“属性”),例如价格或照片(阅读:数据库规范化)。与使用单个整数列相比,它还使 Firebird 引擎的分组更加困难。另外,您确实在index项目识别列上创建了一个,不是吗?您对这些选择的查询计划是什么,他们是否使用索引CodigoConfiguracao/或临时外部排序?

  • 操作的timestamp,由 Firebird 服务器自动设置为current_timestamp,因此您始终知道插入该行的确切时间。索引,当然。

  • 添加该行的计算机用户再次由 Firebird 服务器自动设置为您将创建current_user的某个表中的用户 ID 。stock_workers当然,也被索引了。

  • 操作的一些描述,例如合同编号或卖方名称,任何可以帮助您稍后记住该行甚至描述的真实世界事件的任何内容。作为自由格式文本,它可能不会被索引。但也许您最终会制作一些contractssellers表格并向这些表格添加整数引用(FK ID)?这取决于哪种类型的数据会经常重复,足以值得提取到额外的索引列中。

  • 也许是一个单位度量,也许你所有的单位永远只能以整数为单位来衡量。但也许会有一些以公斤、米、升等为单位的物品?

  • 最后是两个整数(或浮点数?)列,例如Qty_IncomeQty_Outcome,您可以在其中记录从仓库中添加或取出的项目数量。不会有那个E/S栏!将有两个整数列,您可以将数字放入其中。为什么?阅读上面有关簿记的文章!

在这样的数据库方案中,您的查询最终将如下所示:

select Sum(s.Qty_Income) as Credit, Sum(s.Qty_Outcome) as Debit,
       Sum(s.Qty_Income) - Sum(s.Qty_Outcome) as Saldo,
       min(g.Codigo), min(g.Configuracao)
from stock_movements s
       join known_goods g on g.ID = s.SKU_ID 
group by s.SKU_ID

而且您还可以灵活地按工人、日期或数量(例如,只关心在一个操作中添加 1000 或更多项目等大事件)或任何东西来灵活地组合类似的请求。

于 2021-09-17T15:09:04.543 回答