Я создал SQLFiddle (спасибо, Amadan!) С моей схемой и некоторыми тестовыми данными. Вычисляемые столбцы почему-то не работают в SQLFiddle, но в моем MYSQL Workbench они отлично работают. Предположим, что они работают правильно.Комплекс MySQL Query, я настолько близок, что смогу его обмануть
Я получил это далеко с моим запросом:
SELECT DISTINCT o.orderid,i.invoiceid,i.subinvoicenumber,stockingorderid AS oistockingorderid,
IF(stockingorderid > 0, 0, po.purchaseorderid) AS purchaseorderid,subponumber,po.paidvia,dropshipfee,i.taxstate,
COALESCE(
(SELECT mfrname
FROM cs_products.tblstockingorders so
WHERE so.stockingorderid=oistockingorderid),
po.mfrname)
AS source,
(i.shipping + i.surcharge +
(SELECT SUM(additionalshipping * quantity) AS additionalshipping
FROM cs_products.tblorderitems
WHERE invoiceid=i.invoiceid))
AS shipping,
CAST(IF(o.paymentmethod=2, CONCAT('Check: ', i.checknumber),o.paymentmethod) AS CHAR) AS invoicepaidvia,
COALESCE(
(SELECT (SUM(cost * quantity) * IF(so.mfrdiscount > 0, 1 - so.mfrdiscount, 1)) AS cost
FROM cs_products.tblorderitems oi
JOIN cs_products.tblallocations a ON oi.orderitemid=a.orderitemid
JOIN cs_products.tblstockingorders so ON a.stockingorderid=so.stockingorderid
WHERE a.stockingorderid=oistockingorderid),
(SELECT (SUM(cost * quantity) * IF(po.mfrdiscount > 0, 1 - po.mfrdiscount, 1)) AS cost
FROM cs_products.tblorderitems
WHERE purchaseorderid=po.purchaseorderid))
AS grosscost,
(SELECT SUM(price * quantity)
FROM cs_products.tblorderitems
WHERE invoiceid=i.invoiceid)
AS grossprice
FROM cs_products.tblorders o
JOIN cs_products.tblinvoices i ON o.orderid=i.orderid
#ordertype of 0 means the order came from the website
LEFT JOIN cs_products.tblpurchaseorders po ON o.orderid=po.orderid AND IF(o.ordertype<>0, subinvoicenumber=subponumber, subinvoicenumber=0 AND subponumber>=0)
LEFT JOIN cs_products.tblallocations a ON a.orderid=o.orderid
Это заставляет меня 95% пути. Как вы можете видеть, для OrderId
1287, он показывает две записи с stockingorderid
с и ни с purchaseorderid
, даже если заказ на поставку был приписан 1287. То, что я ожидал увидеть пропавшей подряд не что-то вроде:
1287|276|0|NULL|194|0||0|0|'Quality Fabricators'|357.53|0|781.43|11917.70
Опять же, не беспокойтесь о вычисленных столбцах, я просто хочу, чтобы запись появилась. Я чувствую, что мне не хватает наименьшей вещи, но я не знаю, что это.
Спасибо!
UPDATE Причина, по которой расчетные столбцы не работают, объясняется тем, что использовались данные элемента старого заказа. Я обновлю это, когда у меня появится такая возможность.
Используйте IFNULL ((выберите blah blah), (выберите blah blah)), второй по умолчанию, если не найден с первого 2-го запуска, я, возможно, не смогу понять, но я думаю, это то, что вы ищете –
@ Amadan благодарит за то, что я показал мне SQLFiddle. Я много использую JSFiddle и ReFiddle, но я понятия не имел, что SQLFiddle существует! Я создаю SQLFiddle прямо сейчас и обновляю свой пост. Благодаря! – Jason
@ Lieven не могли бы вы поместить свое решение в ответ? – Jason