проблемы с ошибкой: ошибка деления на ноль - PullRequest
0 голосов
/ 31 октября 2019

Здравствуйте, два дня я пытался выяснить, почему мой код не работает. Я совершенно уверен, что это глупая ошибка, но если у кого-то будет время проверить код, я был бы очень признателен. Я пытался закомментировать этот случай "СУММЫ", но потом все остальное ломается

Я знаю, что эта линия облажается со мной, но я не могу понять, как это исправить:

sum (Case when bm.CaseQTY IS NULL 
          then (k.postedqty / mm.CaseQTY)
          else (k.postedqty / bm.CaseQTY)
     End) as laoseiskaste,
sum (Case when bm.CaseQTY IS NULL
          then ((k.postedqty-k.reservordered-k.reservphysical-k.picked+k.registered) / mm.CaseQTY)
          else ((k.postedqty-k.reservordered-k.reservphysical-k.picked+k.registered) / bm.CaseQTY)
     End) as vabakaste
from (select s.itemid, i.product, i.ItemMiscRefId, i.MMFItemProductGroupId, s.INVENTDIMID,
   s.postedqty, s.registered, s.reservordered, s.reservphysical, s.picked, s.ordered,
   s.postedvalue, s.received, i.PrimaryVendorId, i.standardPalletQuantity
from inventsum s WITH (INDEX(I_174CLOSEDITEMDIMIDX),NOLOCK),

SELECT k.itemid AS itemid,
   (CASE WHEN ISNULL(bm.mmfitemid, '') != '' THEN bm.mmfitemid ELSE mm.mmfitemid END) AS mmfitemid,
   (CASE WHEN ISNULL(bm.itembarcode, '') != '' THEN bm.itembarcode ELSE mm.itembarcode END) AS itembarcode,
   e.name AS name, d.inventlocationid AS inventlocationid, d.inventbatchid AS inventbatchid,
   LEFT(CONVERT(varchar, ib.proddate, 121), 10) AS proddate,
   LEFT(CONVERT(varchar, ib.expdate, 121), 10) AS expdate,
   d.wmslocationid AS wmslocationid, d.wmspalletid AS wmspalletid, p.pallettypeid AS pallettypeid,
   xz.inputblockingcauseid AS inputblockingcauseid,  xz.outputblockingcauseid AS outputblockingcauseid,
   d.inventserialid AS inventserialid, d.inventownerid_via AS inventownerid_via,
   d.inventlabelid_via AS inventlabelid_via, d.inventtaxstampid AS inventtaxstampid,
   (CASE WHEN ISNULL(bm.CaseQTY, 0) != 0 THEN bm.CaseQTY ELSE mm.CaseQTY END) AS caseqty,
   k.standardPalletQuantity AS palletqty,
   (CASE WHEN ISNULL(bm.caseheight, 0) != 0 THEN bm.caseheight ELSE mm.caseheight END) AS caseheight,
   (CASE WHEN ISNULL(bm.casewidth, 0) != 0 THEN bm.casewidth ELSE mm.casewidth END) AS casewidth,
   (CASE WHEN ISNULL(bm.casedepth, 0) != 0 THEN bm.casedepth ELSE mm.casedepth END) AS casedepth,
   (CASE WHEN ISNULL(bm.casebarcode, '') != '' THEN bm.casebarcode ELSE mm.casebarcode END) AS casebarcode,
   (CASE WHEN ISNULL(bm.casebrutoweight, 0) != 0 THEN bm.casebrutoweight ELSE mm.casebrutoweight END) AS casebrutoweight,
   (CASE WHEN ISNULL(bm.alcopct, 0) != 0 THEN bm.alcopct ELSE mm.alcopct END) AS alcopct,
   (CASE WHEN ISNULL(bm.blockqty, 0) != 0 THEN bm.blockqty ELSE mm.blockqty END) AS blockqty,
   (CASE WHEN ISNULL(bm.exciseproductregnum, '') != ''
         THEN bm.exciseproductregnum
         ELSE mm.exciseproductregnum
    END) AS exciseproductregnum,
   SUM(k.postedqty + k.received + k.registered) AS postedqty,
   SUM(k.registered) AS registeredqty,
   SUM(k.reservordered + k.reservphysical) AS reservedqty, SUM(k.picked) AS pickedqty,
   SUM(k.postedqty - k.reservordered - k.reservphysical - k.picked + k.registered) AS freeqty,
   SUM(k.ordered) AS ordered, SUM(k.postedvalue) AS postedvalue,
   k.MMFItemProductGroupId AS mmfitemproductgroupid,
   SUM(CASE WHEN bm.CaseQTY IS NULL 
            THEN (k.postedqty / mm.CaseQTY)
            ELSE (k.postedqty / bm.CaseQTY)
       END) AS laoseiskaste,
   SUM(CASE WHEN bm.CaseQTY IS NULL
            THEN ((k.postedqty - k.reservordered - k.reservphysical - k.picked + k.registered) / mm.CaseQTY)
            ELSE ((k.postedqty - k.reservordered - k.reservphysical - k.picked + k.registered) / bm.CaseQTY)
       END) AS vabakaste
FROM (SELECT s.itemid, i.product, i.ItemMiscRefId, i.MMFItemProductGroupId, s.INVENTDIMID,
         s.postedqty, s.registered, s.reservordered, s.reservphysical, s.picked,
         s.ordered, s.postedvalue, s.received, i.PrimaryVendorId, i.standardPalletQuantity
      FROM inventsum s WITH (INDEX(I_174CLOSEDITEMDIMIDX), NOLOCK),
      inventtable i WITH (INDEX([I_175ITEMIDX]), NOLOCK)
      WHERE s.itemid = i.itemid
         AND s.DATAAREAID = @Var1
         AND i.DATAAREAID = @Var1
         AND s.PARTITION = 5637144576
         AND i.PARTITION = 5637144576
         AND RIGHT(s.ITEMID, 2) = 'LA'
         AND s.CLOSED = 0
         AND (s.POSTEDQTY != 0
              OR s.reservordered + s.reservphysical != 0
              OR s.ordered != 0
             )
) k
JOIN inventdim d WITH (INDEX(I_698DIMIDIDX), NOLOCK)
   ON (k.INVENTDIMID = d.INVENTDIMID
   AND d.DATAAREAID = @Var3
   AND d.PARTITION = 5637144576)
LEFT OUTER JOIN EcoresProductTranslation e WITH (INDEX(I_6869PRODUCTLANGUAGEIDX))
   ON (k.product = e.product
   AND e.languageid = 'et'
   AND e.PARTITION = 5637144576)
LEFT OUTER JOIN WMSPALLET p
   ON (p.WMSPALLETID = d.WMSPALLETID
   AND p.PARTITION = 5637144576
   AND p.DATAAREAID = @Var4)
LEFT OUTER JOIN InventItemMisc mm WITH (INDEX(I_103616RecId))
   ON (mm.RecId = k.ItemMiscRefId
   AND mm.PARTITION = 5637144576)
LEFT OUTER JOIN InventBatch ib WITH (INDEX(I_752itemBatchIdx))
   ON (ib.ItemId = k.ItemId
       AND ib.InventBatchId = d.InventBatchId
       AND ib.PARTITION = 5637144576
       AND ib.DATAAREAID = @Var5)
LEFT OUTER JOIN InventItemMisc bm WITH (INDEX(I_103616RecId))
   ON (bm.RecId = ib.ItemMiscRefId
       AND bm.PARTITION = 5637144576)
JOIN WMSLOCATIOn xz WITH (INDEX(/*I672COORDINATEDIDX*/ I_672LOCATIONIDX))
   ON (xz.inventlocationID = d.inventlocationID
       AND xz.wmslocationid = d.wmslocationid
       AND xz.partition = 5637144576
       AND xz.dataareaid = 'EWH')
WHERE 1 = 1
GROUP BY k.itemid,
    (CASE WHEN ISNULL(bm.mmfitemid, '') != '' THEN bm.mmfitemid ELSE mm.mmfitemid END),
    (CASE WHEN ISNULL(bm.itembarcode, '') != '' THEN bm.itembarcode ELSE mm.itembarcode END),
    e.name, d.inventlocationid, d.inventbatchid, LEFT(CONVERT(varchar, ib.proddate, 121), 10),
    LEFT(CONVERT(varchar, ib.expdate, 121), 10), d.wmslocationid, d.wmspalletid,
    p.pallettypeid, xz.inputblockingcauseid, xz.outputblockingcauseid, d.inventserialid,
    d.inventownerid_via, d.inventlabelid_via, d.inventtaxstampid,
    (CASE WHEN ISNULL(bm.CaseQTY, 0) != 0 THEN bm.CaseQTY ELSE mm.CaseQTY END),
    k.standardPalletQuantity,
    (CASE WHEN ISNULL(bm.caseheight, 0) != 0 THEN bm.caseheight ELSE mm.caseheight END),
    (CASE WHEN ISNULL(bm.casewidth, 0) != 0 THEN bm.casewidth ELSE mm.casewidth END),
    (CASE WHEN ISNULL(bm.casedepth, 0) != 0 THEN bm.casedepth ELSE mm.casedepth END),
    (CASE WHEN ISNULL(bm.casebarcode, '') != '' THEN bm.casebarcode ELSE mm.casebarcode END),
    (CASE WHEN ISNULL(bm.casebrutoweight, 0) != 0 THEN bm.casebrutoweight ELSE mm.casebrutoweight END),
    (CASE WHEN ISNULL(bm.alcopct, 0) != 0 THEN bm.alcopct ELSE mm.alcopct END),
    (CASE WHEN ISNULL(bm.blockqty, 0) != 0 THEN bm.blockqty ELSE mm.blockqty END),
    (CASE WHEN ISNULL(bm.exciseproductregnum, '') != ''
          THEN bm.exciseproductregnum
          ELSE mm.exciseproductregnum
     END),
    k.MMFItemProductGroupId
ORDER BY k.itemid,
    (CASE WHEN ISNULL(bm.mmfitemid, '') != '' THEN bm.mmfitemid ELSE mm.mmfitemid END),
    (CASE WHEN ISNULL(bm.itembarcode, '') != '' THEN bm.itembarcode ELSE mm.itembarcode END),
    e.name, d.inventlocationid, d.inventbatchid, LEFT(CONVERT(varchar, ib.proddate, 121), 10),
    LEFT(CONVERT(varchar, ib.expdate, 121), 10), d.wmslocationid, d.wmspalletid,
    p.pallettypeid, xz.inputblockingcauseid, xz.outputblockingcauseid,
    d.inventserialid, d.inventownerid_via, d.inventlabelid_via, d.inventtaxstampid,
    (CASE WHEN ISNULL(bm.CaseQTY, 0) != 0 THEN bm.CaseQTY ELSE mm.CaseQTY END),
    k.standardPalletQuantity,
    (CASE WHEN ISNULL(bm.caseheight, 0) != 0 THEN bm.caseheight ELSE mm.caseheight END),
    (CASE WHEN ISNULL(bm.casewidth, 0) != 0 THEN bm.casewidth ELSE mm.casewidth END),
    (CASE WHEN ISNULL(bm.casedepth, 0) != 0 THEN bm.casedepth ELSE mm.casedepth END),
    (CASE WHEN ISNULL(bm.casebarcode, '') != '' THEN bm.casebarcode ELSE mm.casebarcode END),
    (CASE WHEN ISNULL(bm.casebrutoweight, 0) != 0 THEN bm.casebrutoweight ELSE mm.casebrutoweight END),
    (CASE WHEN ISNULL(bm.alcopct, 0) != 0 THEN bm.alcopct ELSE mm.alcopct END),
    (CASE WHEN ISNULL(bm.blockqty, 0) != 0 THEN bm.blockqty ELSE mm.blockqty END),
    (CASE WHEN ISNULL(bm.exciseproductregnum, '') != ''
          THEN bm.exciseproductregnum
          ELSE mm.exciseproductregnum
     END),
    k.MMFItemProductGroupId;

Ошибка в SQL: Ошибка в SQL: [Microsoft] [Драйвер ODBC 17 для SQL Server] [SQL Server] Ошибка деления на ноль.

1 Ответ

0 голосов
/ 31 октября 2019

В SSMS нажмите Ctrl+F, чтобы открыть диалоговое окно «Найти и заменить». Поиск по запросу для всех экземпляров /. Это скажет вам везде, что происходит деление, плюс некоторые ложные срабатывания.

В каждом отдельном случае запрос делится на mm.CaseQTY или bm.CaseQTY. Это только два значения и две таблицы, о которых вам нужно беспокоиться. Один или другой из них обозначается как ноль.

У нас нет доступа к вашей базе данных, поэтому мы не можем помочь вам решить проблему с данными, но я бы так и решилс чего начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...