Страницы: 1
RSS
Query Отбор данных по условиям, Отбор данных по сложным условиям с учетом различных полей
 
Уважаемые знатоки!
Помогите с запросом. Даже сомневаюсь, что это можно сделать в одном запросе.
Есть данные с полями: Name, Type, Quantity, Price, Subtotal, Start Day, End Day
Нужно отобрать записи, анализируя Name&Type.
Мне кажется, что вначале нужно как-то отсечь те записи, где Name=1 (т.е. только 1 запись)
Type: new, renew, cycle, cancel, credit
Name&Type: могут быть в сочетании только с cancel или с cancel и credit.
1. Сочетания: new или renew или cycle только с cancel
теперь нужно анализировать Quantity:
если Quantity одинаковы, тогда Quantity= Quantity, Price= SUM(Price), Subtotal=SUM(Subtotal), Start Day= Start Day там, где Price>0, End Day=Start Day там, где Price <0
если Quantity разные, тогда Quantity= ABS (Quantity – Quantity), Price= >0, Subtotal=SUM(Subtotal), Start Day= Start Day там, где Price>0, End Day=Start Day там, где Price <0
Type = cancel

2. Сочетания: new или renew или cycle с cancel и credit
если все 3 Quantity одинаковы, тогда Quantity= 0, Price= >0, Subtotal=SUM(Subtotal), Start Day= Start Day там, где Type=cancel, End Day=End Day там, где Price <0
Type = cancel/credit
если Quantity разные, тогда на запись с credit не обращаем внимания, анализируем только new или renew или cycle только с cancel так как в 1 пункте.
Type = cancel

Файл примера прилагаю.

Надежда только на Вас!

 
Здравствуйте.
Пример решения задачи через Power Query прилагаю.
Код не оптимален, и, честно, есть сомнения, что корректно сработает на реальных больших данных.
С куском примера, что указан в задаче - код сработал правильно.
Возможно, специ по query подтянутся и сделают более оптимальный код.
 
turbidgirl,  Добрый вечер!
Применила Ваш запрос на своих данных - пока все ОК! Еще буду проверять по данным следующего месяца - их не очень много (до 3000 записей).
Спасибо большое!
Спецы не подтянулись - ну и ладно.  
 
Здравствуйте!
Цитата
Наталья Сакорская, написал:
Спецы не подтянулись
Наталья Сакорская, я далеко не спец, просто учусь писать на языке М (отучаю себя от привычки клацать мышкой) поэтому оставляю свой вариант PQ.
Всего доброго!  Приятных всем выходных (долгожданных)!!!  )
Изменено: Ma_Ri - 04.11.2024 06:08:50
 
Цитата
Наталья Сакорская написал:
Price= SUM(Price),
как правило (вернее, всегда, не могу представить исключений) в любых моделях суммирование цен - это глупость. Вы уверены, что вам так надо? Если необходима некоторая "средняя" цена, то это только средневзвешенная будет иметь какой-то смысл....Хотя, если цена у вас м.быть отрицательной...ОК.
Изменено: voler83 - 03.11.2024 16:39:50
 
Цитата
Наталья Сакорская написал:
если Quantity одинаковы, тогда Quantity= Quantity, Price= SUM(Price), Subtotal=SUM(Subtotal), Start Day= Start Day там, где Price>0, End Day=Start Day там, где Price <0
а не может случиться так, что Quantity одинаковы и оба значения Price будут >0 и не равны между собой? чему тогда будут равны Start Day и End Day?
Изменено: voler83 - 03.11.2024 16:56:47
 
Цитата
Наталья Сакорская написал:
если Quantity разные, тогда Quantity= ABS (Quantity – Quantity), Price= >0, Subtotal=SUM(Subtotal), Start Day= Start Day там, где Price>0, End Day=Start Day там, где Price <0
вопрос, аналогичный предыдущему, но тут еще + чему будет равно Price?
 
по исходным условиям
принцип - новые значения полей собираются в текстовую строку через разделитель "//", потом деление по разделителю
если не затруднит - отпишитесь, какой вариант работает быстрее на большом кол-ве строк
 
Ma_Ri,
У меня появились ошибки на основных данных по варианту turbidgirl Буду проверять на Вашем ответе.
Спасибо, что отозвались!
О результате обязательно сообщу.
 
voler83,
Нет такого варианта, что оба Price>0 не будет - специфика данных!
 
voler83,
Буду проверять и по Вашему варианту, т.к. появились ошибки на новых данных по ответу turbidgirl Данные очень специфические - то что описано в вопросе так и есть, других вариантов не будет.
Обработка данных идет по очень разным условиям (потом все идут на Append) - на все предыдущие получила ответы - все работает, остался один самый специфичный.
 
Наталья Сакорская, получилось?
Страницы: 1
Наверх