0

我想将在按产品分组的日期之前进行的库存变动相加。我必须根据文档类型检查不同表格中的日期。

基本上我有 3 种类型的动作:发票、无效发票和其他类型的文件。这些文件的信息在 3 个表格中:

  • 发票: DOC , DATE, ....
  • NULLED_INV: DOC , DATE, ....
  • 其他人: DOC , DATE, ....

然后我将所有动作放在另一张桌子上:

  • 运动( PRODUCT_ID, DOC, DOC_TYPE, QUANTITY...)

所以我需要检查相应表格中的日期,DOC_TYPE以便将运动加起来QUANTITY。例如,如果DOC_TYPE = 1然后检查日期DOCINVOICES如果DOC_TYPE = 2然后检查日期,NULLED_INV如果DOC_TYPE = 3然后检查日期OTHERS,然后将按产品分组的所有动作加起来:

PRODUCT_ID TOTAL_MOVEMENTS_BEFORE_XXXX
1001       10
1002       25
...

关于如何进行此类查询的任何想法?

我尝试在子句中使用 IFWHERE但它不起作用。

4

1 回答 1

2

最简单的解决方案应该是UNION

SELECT product_id, count(*) total_movements_before
FROM movements m
LEFT JOIN (
  SELECT doc, date
  FROM invoices
  UNION ALL
  SELECT doc, date
  FROM nulled
  UNION ALL
  SELECT doc, date
  FROM others
) sub
ON m.doc = sub.doc
WHERE sub.date < :beforedate
GROUP BY m.product_id

不过,我必须补充一点,你为什么不在表格中添加一列invoices来指示类型?UNION这样,您可以将三个表合并为一个,并且当您想从所有三个中进行选择时不需要s(例如SELECT * FROM movements m LEFT JOIN invoices i ON m.doc = i.doc AND m.doc_type = i.doc_type

于 2012-07-24T08:24:05.323 回答