Как удалить возмещенные счета из счетов клиентов?

Я хотел бы получить следующий результат из таблицы ниже: Для каждого клиента возвращенные счета будут удалены из приобретенных счетов. Например, если куплен один продукт и за него возвращен возврат средств, обе строки (счета-фактуры) будут удалены. Однако если 2 продукта приобретены в одном счете-фактуре и один из них возвращен, из таблицы будет удален только счет-фактура с возвратом средств путем вычета суммы возврата и дохода (счет-фактура возврата) из счета-фактуры, содержащего информацию об этих двух продуктах. Я пометил купленные счета и счета за возврат средств одним и тем же цветом.

IsReturn=1: возможен возврат средств. IsReturn=0: возврат средств невозможен. ItemCode: код продукта ColorCode: цвет продукта. ItemDim1Code: размер продукта. Qty: количество приобретенного товара

Я также добавил те же данные, что и в таблицу ниже:

Клиентский код Номер счета IsReturn Дата счета Идентификатор приложения Код изделия Цветовой код ItemDim1Code Кол-во Доход 15656858 193-Р-7-373740 1 11.06.2022 DB3A6DCB-7A8C-415C-AF35-AEA200D5FE7F 4А1400000002 СИХ 50 -1 -699,99 15656858 193-Р-7-372193 0 27.05.2022 DB3A6DCB-7A8C-415C-AF35-AEA200D5FE7F 4А1400000002 СИХ 50 2 1.399,98 15656858 193-Р-7-373781 1 12.06.2022 D7BD6F42-F1F3-4EC4-9599-AEB000A7CB70 4A2022200036 ЯВЗ XL -1 -240,28 15656858 193-Р-7-373502 0 10.06.2022 D7BD6F42-F1F3-4EC4-9599-AEB000A7CB70 4A2022200036 ЯВЗ XL 1 240,28 15656858 193-Р-7-372193 0 27.05.2022 DB3A6DCB-7A8C-415C-AF35-AEA200D5FE7F 4А7020000001 НАТ СТН 1 26,95 15656858 193-Р-7-373782 0 12.06.2022 D832836F-36BB-42ED-B64C-AEB200B6B19F 4А2022200001 БИД л 1 299,99 15656858 193-Р-7-373782 0 12.06.2022 D832836F-36BB-42ED-B64C-AEB200B6B19F 4A2022200034 ХАК XL 1 299,99 15656858 193-Р-7-373742 0 11.06.2022 00CB6240-D073-4E06-8CA9-AEB10133DE90 4А1400000001 СИХ 50 1 699,99 15656858 193-Р-7-373742 0 11.06.2022 00CB6240-D073-4E06-8CA9-AEB10133DE90 4А1400000001 ATR 52 1 699,99 21069880 406-Р-7-121023 0 4.05.2023 67732FA9-E3CA-4BB1-8C13-AFF800F89C60 4A0121100002 ЮСЛ 52 1 199,99 21069880 406-Р-7-120741 0 26.04.2023 284DE832-8CE7-41D1-9FCE-AE31011A4AA8 4А1400000001 СИХ 56 1 379,99 21069880 1-Р-7-16894399 1 26.04.2023 284DE832-8CE7-41D1-9FCE-AE31011A4AA8 4А1400000001 СИХ 56 -1 -379,99 21069880 406-Р-7-120740 0 26.04.2023 9E1674D1-8B70-4BCF-9A82-AFF00112E876 4А1400000001 СИХ 52 1 879,99 21069880 1-R-7-16853468 0 3.09.2022 F045ED37-E17C-4690-83D9-AF0500A17621 4А2000000013 амв XL 3 1.999,86 21069880 1-R-7-16894396 1 7.09.2022 F045ED37-E17C-4690-83D9-AF0500A17621 4А2000000013 амв XL -1 -666,62 21069880 1-R-7-16853468 0 3.09.2022 F045ED37-E17C-4690-83D9-AF0500A17621 4А3022100145 ГСИ 52 1 1.587,20 21069880 406-Р-7-120740 0 4.05.2023 8C5D271E-30D2-497E-BB0C-AFF800F9EE0B 4A9000000001 ГМЖ л 1 359,99

В конце концов я хотел бы получить результат, подобный следующему:

Клиентский код Номер счета IsReturn Дата счета Идентификатор приложения Код изделия Цветовой код ItemDim1Code Кол-во Доход 15656858 193-Р-7-372193 0 27.05.2022 DB3A6DCB-7A8C-415C-AF35-AEA200D5FE7F 4А1400000002 СИХ 50 1 699,99 15656858 193-Р-7-372193 0 27.05.2022 DB3A6DCB-7A8C-415C-AF35-AEA200D5FE7F 4А7020000001 НАТ СТН 1 26,95 15656858 193-Р-7-373782 0 12.06.2022 D832836F-36BB-42ED-B64C-AEB200B6B19F 4А2022200001 БИД л 1 299,99 15656858 193-Р-7-373782 0 12.06.2022 D832836F-36BB-42ED-B64C-AEB200B6B19F 4A2022200034 ХАК XL 1 299,99 15656858 193-Р-7-373742 0 11.06.2022 00CB6240-D073-4E06-8CA9-AEB10133DE90 4А1400000001 СИХ 50 1 699,99 15656858 193-Р-7-373742 0 11.06.2022 00CB6240-D073-4E06-8CA9-AEB10133DE90 4А1400000001 ATR 52 1 699,99 21069880 406-Р-7-121023 0 4.05.2023 67732FA9-E3CA-4BB1-8C13-AFF800F89C60 4A0121100002 ЮСЛ 52 1 199,99 21069880 406-Р-7-120740 0 26.04.2023 9E1674D1-8B70-4BCF-9A82-AFF00112E876 4А1400000001 СИХ 52 1 879,99 21069880 406-Р-7-120740 0 4.05.2023 8C5D271E-30D2-497E-BB0C-AFF800F9EE0B 4A9000000001 ГМЖ л 2 1.333,24 21069880 1-R-7-16853468 0 3.09.2022 F045ED37-E17C-4690-83D9-AF0500A17621 4А3022100145 ГСИ 52 1 1.587,20 21069880 406-Р-7-120740 0 4.05.2023 8C5D271E-30D2-497E-BB0C-AFF800F9EE0B 4A9000000001 ГМЖ л 1 359,99

Пожалуйста, отметьте только одну rdbms

Dale K 07.06.2024 11:58

Пожалуйста, не используйте изображения... Используйте уценку таблицы.

Dale K 07.06.2024 11:58

Является ли ApplicationID способом связать счет и возврат? Я бы, вероятно, присоединился к счету-фактуре с агрегированным количеством возвратов и проверил, является ли SUM (возвращенная сумма) >= сумма счета-фактуры, и либо скорректировал его, либо вообще удалил строку. Это может оказаться интересным, если у вас нет хорошей системы возврата, которая бы правильно соответствовала продуктам и т. д.

siggemannen 07.06.2024 12:21

Я подозреваю, что у вас слишком сложный пример. Вероятно, вы можете удалить столбцы CustomerCode, InvoiceNumber, InvoiceDate, ColorCode и ItemDim1Code и получить то же логическое решение.

Bart McEndree 07.06.2024 17:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
80
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

WITH n AS (
    SELECT  CustomerCode, ApplicationID, ItemCode, ColorCode, ItemDim1Code, SUM (Qty) Qty, SUM (Revenue) Revenue
    FROM    sales_data
    GROUP BY CustomerCode, ApplicationID, ItemCode, ColorCode, ItemDim1Code
    HAVING SUM(qty) > 0
)
SELECT  n.CustomerCode, s.InvoiceNumber, s.IsReturn, s.InvoiceDate, n.ApplicationID, n.ItemCode, n.ColorCode, n.ItemDim1Code, n.Qty, n.Revenue
FROM    n
    JOIN    sales_data  s
        ON  (   s.CustomerCode  =   n.CustomerCode
            AND s.ApplicationID =   n.ApplicationID
            AND s.ItemCode      =   n.ItemCode
            AND s.ColorCode     =   n.ColorCode
            AND s.ItemDim1Code  =   n.ItemDim1Code
            AND s.IsReturn      =   FALSE
            );

Спасибо, но это идет в строках с is.Return=1

Bugra Varol 07.06.2024 13:46

@burga.varol. изменено с учетом необходимости

Jitendra Loyal 09.06.2024 07:34

хорошая перспектива. спасибо, это сработало

Bugra Varol 09.06.2024 22:28
Ответ принят как подходящий

При наличии возврата требуется перерасчет количества и дохода для каждой группы CustomerCode, ItemCode, ApplicationID. Таблица sales_data имеет 17 строк. 4 строки будут удалены из-за простого возврата именно того, что было куплено (идентификатор приложения заканчивается на 036 и 001). 2 строки удалены из-за частичного возврата (идентификатор приложения заканчивается на E7F и 621). Окончательные результаты будут иметь 11 строк. Это можно упростить, если ApplicationID однозначно идентифицирует покупку или возврат товара.

WITH ReturnedItems  AS
(  
--Items that have been returned  
SELECT CustomerCode,ItemCode,ApplicationID, SUM(cast(qty as int)) as NewQty, 
  Sum(Revenue) as NewRevenue
FROM sales_data 
GROUP BY CustomerCode,ItemCode,ApplicationID    
HAVING MAX(IsReturn)=1
)
SELECT s.CustomerCode, 
       s.InvoiceNumber, 
       s.IsReturn, 
       s.InvoiceDate, 
       s.ApplicationID, 
       s.ItemCode, 
       s.ColorCode, 
       s.ItemDim1Code,  
       Isnull(r.NewQty, s.Qty) as QTY, 
       ISNULL(r.NewRevenue,s.Revenue) as Revenue
FROM sales_data s
LEFT JOIN ReturnedItems r ON r.CustomerCode=s.CustomerCode 
                         and r.ItemCode=s.ItemCode
                         and r.ApplicationID=s.ApplicationID  
WHERE IsReturn=0 AND (r.NewQty<>0 or r.NewQty IS NULL )

рабочий пример

Клиентский код Номер счета IsReturn Дата счета Идентификатор приложения Код изделия Цветовой код ItemDim1Code Кол-во Доход 15656858 193-Р-7-372193 0 27.05.2022 DB3A6DCB-7A8C-415C-AF35-AEA200D5FE7F 4А1400000002 СИХ 50 1 699,9900 15656858 193-Р-7-372193 0 27.05.2022 DB3A6DCB-7A8C-415C-AF35-AEA200D5FE7F 4А7020000001 НАТ СТН 1 26.9500 15656858 193-Р-7-373782 0 12.06.2022 D832836F-36BB-42ED-B64C-AEB200B6B19F 4А2022200001 БИД л 1 299,9900 15656858 193-Р-7-373782 0 12.06.2022 D832836F-36BB-42ED-B64C-AEB200B6B19F 4A2022200034 ХАК XL 1 299,9900 15656858 193-Р-7-373742 0 11.06.2022 00CB6240-D073-4E06-8CA9-AEB10133DE90 4А1400000001 СИХ 50 1 699,9900 15656858 193-Р-7-373742 0 11.06.2022 00CB6240-D073-4E06-8CA9-AEB10133DE90 4А1400000001 ATR 52 1 699,9900 21069880 406-Р-7-121023 0 4.05.2023 67732FA9-E3CA-4BB1-8C13-AFF800F89C60 4A0121100002 ЮСЛ 52 1 199,9900 21069880 406-Р-7-120740 0 26.04.2023 9E1674D1-8B70-4BCF-9A82-AFF00112E876 4А1400000001 СИХ 52 1 879,9900 21069880 1-R-7-16853468 0 3.09.2022 F045ED37-E17C-4690-83D9-AF0500A17621 4А2000000013 амв XL 2 1333.2400 21069880 1-R-7-16853468 0 3.09.2022 F045ED37-E17C-4690-83D9-AF0500A17621 4А3022100145 ГСИ 52 1 1587.2000 21069880 406-Р-7-120740 0 4.05.2023 8C5D271E-30D2-497E-BB0C-AFF800F9EE0B 4A9000000001 0 0,0000

Большое спасибо. Мне удалось получить желаемый результат.

Bugra Varol 09.06.2024 22:19

Другие вопросы по теме