【问题标题】:Merge Multiple Queries Into 1 Query - On the same Row将多个查询合并为 1 个查询 - 在同一行
【发布时间】:2019-09-23 13:54:19
【问题描述】:

我有 1 个名为 itemmovement 的表:它有 Item Id、Quantity In、Quantity Out、Invoice Id、Date。 我需要在一个查询中显示已售出多少件,并且在已售列旁边会显示当前的现有数量。

物品移动

Id itemid qtyin qtyout invid 日期 1 1 10 2019-01-04 2 2 8 2019-01-06 3 2 2 1 2019-01-08 4 1 3 2 2019-01-12 5 2 1 2019-02-04 6 3 4 2019-03-04 7 1 1 3 2019-04-04

我需要查询来显示这个结果

Id itemid 已售数量 OnHandQty 1 1 4 6 2 2 2 7 3 3 0 4

我正在尝试使用此查询但不工作

选择 * 从 ( 选择 itmv.itemid,sum(itmv.qtyout)-sum(itmv.qtyin) FROM itemmoveitmv WHERE(itmv.systemdate BETWEEN '2019-01-01' AND '2019-06-01')和 显示>0 按 itmv.itemid 分组)作为结果 1, (选择总和(itmv2.qtyin)-总和(itmv2.qtyout) 来自 itemmovement itmv2 其中 itmv.itemid=itmv2.itemid 按 itmv2.itemid 分组)作为 result2 按 sum(itmv.qtyin)-sum(itmv.qtyout) 排序

【问题讨论】:

  • 什么不工作你得到一个错误或只是简单的无效结果?
  • 我不明白您如何在结果集中获得 Id 列的值。它只是结果的行号吗?否则我看不出Id = 3 是如何给出itemid = 3 的。
  • @Martin 他们是 3 个项目,所以 itemid 1 , 2 , 3 。对于 Id,它是查询的普通 Id,它不涉及任何内容。
  • @RaymondNijland 我得到的错误:'where 子句中的未知列'itmv.itemid' 用于此语法:where itmv.itemid=itmv2.itemid

标签: php mysql sql join union


【解决方案1】:

你只是想要聚合吗?

select itemid,
       sum(qtyout) as sold_quantity,
       coalesce(sum(qtyin), 0) - coalesce(sum(qtyout), 0) as onhand
from itemmovement itmv
group by itemid;

【讨论】:

  • 列互换。 Sum(qtyout) 已售出;而 sum(in - out) = onhand
  • 实际上我的表格更大,因为我有与购买退货相关的数量,我有额外的列purchasereturnid - 字段,并且数量在相同的数量输出(qtyout)列下,所以我可以' t 使用查询;这是正确的,但在我的情况下我不能使用,我需要用于已售数量,其中 invid>0(仅获取已售数量(qtyout))
  • @Moussa 。 . .也许您应该用更合适的样本数据提出一个新问题。
【解决方案2】:

按 id 分组并聚合:

select
  itemid,
  coalesce(sum(qtyout), 0) `Sold Quantity`,
  coalesce(sum(qtyin), 0) - coalesce(sum(qtyout), 0) OnHandQty
from itemmovement
group by itemid

请参阅demo
结果:

| itemid | Sold Quantity | OnHandQty |
| ------ | ------------- | --------- |
| 1      | 4             | 6         |
| 2      | 2             | 7         |
| 3      | 0             | 4         |

【讨论】:

  • 实际上我的表更大,因为我有与购买退货相关的数量,我有额外的列purchasereturnid,它在相同的数量列下,所以我不能使用查询;这是正确的,但在我的情况下我不能使用,我需要用于已售数量,其中 invid>0(仅获取已售数量(qtyout))
  • 这回答了您发布的问题。如果有新的需求,请发布另一个问题。
猜你喜欢
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 2017-05-04
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多