「PROD_CD」で4つの個別のクエリを結合して、正しい出力を1つのクエリに返し、後で別の言語でクエリをマージする必要がないようにしようとしています。現在のものでは(そして私は多くのバリエーションを試しましたが、すべてさまざまな問題があります)、多くの重複した結果とそれぞれの重複の数が異なります。
これが私が試している現在のクエリです(すべての日付関数は一定期間にわたってデータセットを決定するためのものです-データベースは非常に古く、クラリオン時間を使用しています):
$query_ats = "SELECT
plog.prod_cd as prod_id,
ord_log.ORDER_QTY as total_so,
ediordlg.ORDER_QTY as total_edi_so,
inv_data.IN_STOCK as in_stock
FROM plog
INNER JOIN ord_log
ON plog.prod_cd = ord_log.prod_cd
INNER JOIN ediordlg
ON plog.prod_cd = ediordlg.prod_cd AND ord_log.prod_cd = ediordlg.prod_cd
INNER JOIN inv_data
ON plog.prod_cd = inv_data.prod_cd AND ord_log.prod_cd = inv_data.prod_cd AND ediordlg.prod_cd = inv_data.prod_cd
WHERE
inv_data.CLASS_CD = 'ALG7'
AND
dateadd(day, plog.EST_DT, '18001228') BETWEEN getdate() and dateadd(day, $x, getdate())
AND
dateadd(day, ord_log.SHIP_DT, '18001228') BETWEEN getdate() and dateadd(day, $x, getdate())
AND
dateadd(day, ediordlg.SHIP_DT, '18001228') BETWEEN getdate() and dateadd(day, $x, getdate())
GROUP BY plog.prod_cd, plog.log_qty, ord_log.ORDER_QTY, ediordlg.ORDER_QTY, inv_data.IN_STOCK
ORDER BY plog.prod_cd ASC";
そして、これはそれが出力するもののサンプルです:
配列([prod_id] => ALG-809
[total_so] => 4 [total_edi_so] => 46 [in_stock] => 0)配列([prod_id] => ALG-809
[total_so] => 6 [total_edi_so] => 46 [in_stock] => 0)配列([prod_id] => ALG-809
[total_so] => 7 [total_edi_so] => 46 [in_stock] => 0)
正しい結果を返す4つの個別のクエリは次のとおりです。
$query_stock = "SELECT
prod_cd,
inv_data.DESCRIP,
inv_data.IN_STOCK
from
inv_data
where
inv_data.CLASS_CD = 'ALG7'
ORDER BY
inv_data.prod_cd ASC";
$query_po = "SELECT
plog.prod_cd,
SUM(plog.log_qty) as total_po
FROM
plog JOIN inv_data ON plog.prod_cd = inv_data.prod_cd
WHERE
inv_data.CLASS_CD = 'ALG7'
AND
dateadd(day, EST_DT, '18001228') BETWEEN getdate() and dateadd(day, $x, getdate())
GROUP BY
plog.prod_cd
ORDER BY
plog.prod_cd ASC";
$query_so = "SELECT
ord_log.prod_cd,
SUM(ord_log.ORDER_QTY) as total_so
FROM
ord_log JOIN inv_data ON ord_log.prod_cd = inv_data.prod_cd
WHERE
inv_data.CLASS_CD = 'ALG7'
AND
dateadd(day, SHIP_DT, '18001228') BETWEEN getdate() and dateadd(day, $x, getdate())
GROUP BY
ord_log.PROD_CD
ORDER BY
ord_log.prod_cd ASC";
$query_edi = "SELECT
ediordlg.prod_cd,
SUM(ediordlg.ORDER_QTY) as total_so_EDI
FROM
ediordlg JOIN inv_data ON ediordlg.prod_cd = inv_data.prod_cd
WHERE
inv_data.CLASS_CD = 'ALG7'
AND
dateadd(day, SHIP_DT, '18001228') BETWEEN getdate() and dateadd(day, $x, getdate())
GROUP BY
ediordlg.PROD_CD
ORDER BY
ediordlg.prod_cd ASC";
私が使っているのはJOINだと思いますが、一生理解できません。助言がありますか?ありがとう!