Я пытаюсь суммировать столбец «Количество» в нашей базе данных всякий раз, когда идентификатор элемента либо сам, либо сам по себе с нулем впереди (в данном случае, например, это идентификатор 2447 или 02447):
Я начал со следующего, чтобы получить суммы идентификаторов:
SELECT
"TJ_TransactionJournalDetail"."TLI_ScanCode" As LineItemID,
"TJ_StockInventory"."INV_ScanCode" As InventoryID,
"TJ_TransactionJournalDetail"."TLI_ReceiptAlias" As ReceiptAlias,
"TJ_StockInventory"."INV_Name" As ItemName,
"TJ_TransactionJournalDetail"."TLI_LIT_FK" As LineDiscount,
SUM("TJ_TransactionJournalDetail"."TLI_Quantity") AS Quantity
FROM "TJ_StockInventory" LEFT OUTER JOIN "TJ_TransactionJournalDetail" ON "TJ_StockInventory"."INV_PK" = "TJ_TransactionJournalDetail"."INV_PK"
WHERE ecrs.TJ_TransactionJournalDetail.TLI_StartTime > '2020-01-17 00:00:00.000'
AND ecrs.TJ_TransactionJournalDetail.TLI_EndTime < '2020-01-19 23:59:59.999'
AND INV_DPT_FK = 49
AND "TJ_TransactionJournalDetail"."TLI_LIT_FK" = 1
GROUP BY LineItemID,InventoryID,ReceiptAlias,ItemName,LineDiscount
ORDER BY InventoryID;
Вот результаты, количество которых я пытаюсь объединить:
LineItemID,InventoryID,ReceiptAlias,ItemName,LineDiscount,Quantity
'2447','02447 ','DELI-BEAR CLAW EA','Bear Claw',1,1.0000
'02447','02447 ','DELI-BEAR CLAW EA','Bear Claw',1,30.0000
Что я ищу:
'2447','02447 ','DELI-BEAR CLAW EA','Bear Claw',1,31.0000
-или-
'02447','02447 ','DELI-BEAR CLAW EA','Bear Claw',1,31.0000
, пока количество равно 31.
Я в основном хочу объединить количество из двух строк, если LineItemID совпадает с «0», сцепленным с LineItemID в другой строке. Или другой способ сделать это - объединить все элементы с одним и тем же InventoryID, но он находится в таблице StockInventory, а не в таблице TransactionJournal, в которой есть сумма, которую я суммирую.
И попытался число решений, сначала я попробовал оператор CASE, но не смог понять, как применить его к строкам:
....
SUM (
CASE WHEN ( "TJ_StockInventory"."INV_ScanCode" = STRING('0',"TJ_TransactionJournalDetail"."TLI_ScanCode",' ') )
THEN "TJ_TransactionJournalDetail"."TLI_Quantity"
ELSE 0 END
) AS Quantity
FROM "TJ_StockInventory" LEFT OUTER JOIN
....
Я также попытался разбить по ItemID, чтобы объединить количество, когда InventoryID были одинаковыми:
....
SUM("TJ_TransactionJournalDetail"."TLI_Quantity") over (partition by "TJ_StockInventory"."INV_ScanCode") AS Quantity
....
Но ни одно из этих решений не сработало. Я выбрал «иначе 0» в регистре только для того, чтобы сузить его до этого одного элемента, но во всех случаях он разделял строки и не объединял количества.
Я рассмотрел ряд учебные пособия, но, похоже, ни один из них не касается этого конкретного случая c, и я не нашел ничего, что намекало бы на решение для этого. При этом мне иногда трудно сосредоточиться на программировании баз данных, и я открыт для мысли, что, возможно, я неправильно подхожу к этому.
Несколько примеров псевдокода того, что я ищу
if LineItemID of this row = CONCAT('0', LineItemID) of another row
then sum the quantities of those rows
-или-
if InventoryID of this row and InventoryID of another row are equal
then sum them even if the LineItemIDs are different
Любая помощь, указатели или указания к примерам или документам в Интернете, которые могут помочь с этим, будут великолепны!
Спасибо!