|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
Добрый день, У меня есть база данных с чеками нескольких магазинов. Мне нужно их сгруппировать по критерию суммы. Небольшая часть базы данных выглядит следующим образом (в самой базе сотни тысяч строк: Кнк/бмр-0000001 2021-01-02 09:51:20.240 бмр 97.00 Кнк/бмр-0000002 2021-01-02 09:51:50.517 бмр 96.00 Кнк/скв-0000001 2021-01-02 09:52:19.810 скв 104.00 Кнк/бмр-0000003 2021-01-02 09:52:26.153 бмр 480.00 Кнк/скв-0000003 2021-01-02 09:53:00.747 скв 39.00 Кнк/бмр-0000004 2021-01-02 09:53:07.090 бмр 15.00 Кнк/жкт-0000001 2021-01-02 09:56:13.003 жкт 139.00 Кнк/жкт-0000002 2021-01-02 09:56:49.270 жкт 41.00 Кнк/жкт-0000009 2021-01-02 09:57:27.777 скв 59.00 Кнк/жкт-0000003 2021-01-02 09:57:34.550 жкт 35.00 Кнк/жкт-0000005 2021-01-02 09:58:22.613 жкт 123.00 Сам код для выгрузки этих данных SELECT doc_cnt = docs1.name, --если уникальные Year_manth = docs1.created, Market = m.doc_prefix, summa = docs1.amount_nds FROM student.docs1 WITH (NOLOCK) LEFT JOIN student.dbo.markets m WITH (NOLOCK) ON docs1.market_id=m.market_id WHERE doc_type_id IN (8001,8101,8201) -- типы документов, смотри таблицу docs_types AND docs1.created >='20210101' -- универсальный тип даты AND docs1.status_id = 1 Итого составили код, который группирует чеки по категории суммы - amount_nds. Но он просто суммирует всю сумму чеков по максимуму в последнюю категорию - более $20000, а не ранжирует по каждому чеку. Пример кода: SELECT doc_cnt = COUNT (d.name), --если уникальные Year_manth = FORMAT (d.created, 'MMM yyyy'), Market = m.doc_prefix, doc_id = CASE WHEN SUM(d.amount_nds) <= 0 THEN 'ERROR' WHEN SUM(d.amount_nds) < 1000 THEN 'Under $1000' WHEN SUM(d.amount_nds) >= 1000 and SUM(d.amount_nds) < 5000 THEN 'Under $5000' WHEN SUM(d.amount_nds) >= 5000 and SUM(d.amount_nds) < 20000 THEN 'Under $20000' ELSE 'Over $20000' END FROM student.dbo.docs1 d WITH (NOLOCK) LEFT JOIN student.dbo.markets m WITH (NOLOCK) ON d.market_id=m.market_id WHERE doc_type_id IN (8001,8101,8201) -- типы документов, смотри таблицу docs_types AND d.created >='20210101' -- универсальный тип даты AND d.status_id = 1 GROUP BY m.doc_prefix, FORMAT (created, 'MMM yyyy') Прилагаю часть данных, выгруженных этим кодом: doc_cnt Year_manth Market doc_id 26850 May 2021 бмр Over $20000 92240 Mar 2021 скв Over $20000 71041 Jan 2021 бмр Over $20000 1 Apr 2021 фбр Over $20000 74797 Feb 2021 скв Over $20000 94061 Apr 2021 скв Over $20000 47130 Mar 2021 кгб Over $20000 85160 Apr 2021 бмр Over $20000 13568 May 2021 жкт Over $20000 31804 May 2021 скв Over $20000 68615 Feb 2021 бмр Over $20000 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 08:30 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
Выложите пример исходных данных в виде CREATE TABLE + INSERT INTO (и используйте тег SRC). Либо создайте online fiddle и дайте ссылку. Покажите требуемый ответ для именно этих данных. С подробным пояснением для 1-2 строк результата, ссылаясь на конкретные исходные значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 09:07 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
Akina, Прикладываю коды из программы MSQL и таблицу Excel с необходимым готовым результатом ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 09:55 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
gerzzog, Это нужно вынести в группировку: Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 10:54 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
А можете, пожалуйста, указать точнее в формате кода, а то я если просто переношу этот код в группировку после GROUP BY m.doc_prefix, FORMAT (created, 'MMM yyyy') выдает ошибку. Наверное есть тонкости, которые я делаю неправильно ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 11:16 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
Приложил измененный код. Выдает ошибку: Msg 144, Level 15, State 1, Line 16 Cannot use an aggregate or a subquery in an expression used for the group by list of a GROUP BY clause. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 15:57 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
Может есть идеи,что сделано неверно в коде? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 08:43 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
gerzzog Может есть идеи,что сделано неверно в коде? В генетическом коде ошибка. 1. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Опосля чего смотришь на Сумма и чешешЪ репу. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 09:04 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
aleks222, Да, уже видел этот результат:( он просто полностью суммирует и группирует только по маркетам и месяцам. Нужна еще группировка по условию в конце: CASE WHEN SUM(d.amount_nds) <= 0 THEN 'ERROE' WHEN SUM(d.amount_nds) < 1000 THEN 'Under $1000' WHEN SUM(d.amount_nds) >= 1000 and SUM(d.amount_nds) < 5000 THEN 'Under $5000' WHEN SUM(d.amount_nds) >= 5000 and SUM(d.amount_nds) < 20000 THEN 'Under $20000' ELSE 'Over $20000' END Но у меня не получается ее добавить. Что-то с синтаксисом неправильно ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 09:51 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
А если в конце в группировку добавить: GROUP BY m.doc_prefix, FORMAT (created, 'MMM yyyy'), doc_id то он просто все чеки подряд по порядку выложит, но не просуммирует внутри категорий( ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 10:09 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
gerzzog aleks222, Да, уже видел этот результат:( он просто полностью суммирует и группирует только по маркетам и месяцам. Нужна еще группировка по условию в конце: CASE WHEN SUM(d.amount_nds) <= 0 THEN 'ERROE' WHEN SUM(d.amount_nds) < 1000 THEN 'Under $1000' WHEN SUM(d.amount_nds) >= 1000 and SUM(d.amount_nds) < 5000 THEN 'Under $5000' WHEN SUM(d.amount_nds) >= 5000 and SUM(d.amount_nds) < 20000 THEN 'Under $20000' ELSE 'Over $20000' END Но у меня не получается ее добавить. Что-то с синтаксисом неправильно С генетическим кодом большие проблемы. ЭТО Код: sql 1. 2. 3. 4. 5.
НЕ условие. Ты, страдалец, СЛОВАМИ могешь описать "чего тебе надо"? Т.е. объяснить СУММА ЧЕГО должна быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 10:28 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
Мне нужно, чтобы запрос брал один чек и по сумме относил его к категории до 1000 у.е., от 1000 и до 5000 и т.д. И потом нужно, чтобы он брал чеки одной и той же категории и подсчитывал их общее количество и сумму чтобы был примерно такой ответ: Количество чеков Маркет Месяц Категория 256 СБР Янв.2021 до 1000 у.е. 556 СБР Янв.2021 1000-5000у.е. Сейчас же запрос делает немного по другому. Он по сути ранжирует как надо, если не группировать. А если группировку добавить, то он суммирует все суммы чеков по маркетам в пределах месяца и на эту сумму ставит ранг > 20 000 у.е. Количество чеков Маркет Месяц Категория 1256 СБР Янв.2021 > 20 000 у.е. 54364 МКР Янв.2021 > 20 000 у.е. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 11:18 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
Прикладывал файл, какой результат хочется получить ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 11:24 |
|
SQL запрос требует доработки
|
|||
---|---|---|---|
#18+
gerzzog Мне нужно, чтобы запрос брал один чек и по сумме относил его к категории до 1000 у.е., от 1000 и до 5000 и т.д. И потом нужно, чтобы он брал чеки одной и той же категории и подсчитывал их общее количество и сумму чтобы был примерно такой ответ: Количество чеков Маркет Месяц Категория 256 СБР Янв.2021 до 1000 у.е. 556 СБР Янв.2021 1000-5000у.е. Сейчас же запрос делает немного по другому. Он по сути ранжирует как надо, если не группировать. А если группировку добавить, то он суммирует все суммы чеков по маркетам в пределах месяца и на эту сумму ставит ранг > 20 000 у.е. Количество чеков Маркет Месяц Категория 1256 СБР Янв.2021 > 20 000 у.е. 54364 МКР Янв.2021 > 20 000 у.е. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 13:26 |
|
|
start [/forum/topic.php?fid=46&fpage=25&tid=1684722]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 127ms |
0 / 0 |