• Ласкаво просимо на Спільнота для обміну досвідом між користувачами програм УкрБланк, УкрСклад, УкрЗарплата.
 

Помощь в SQL запросе

Автор cola78, Квітень 08, 2021, 12:52:01

Попередня тема - Наступна тема

0 Користувачі і 2 Гостей дивляться цю тему.

cola78

Написал SQL запрос для отображения группы документов по розничному покупателю для того, чтоб найти ошибочный прибыльный ордер (не прикрепленный к розничной накладной)

SELECT
    GROUP_id, FIO, NAME,NU, DATE_DOK,SUMA_PDV
    FROM
    SHOW_DOCS_GROUPS(3,'01.01.2016','31.03.2021')
    WHERE  FIO='Розничный покупатель'

Мне нужна группа, где количество документов 1. Для этого нужно сгруппировать данные. Если дописываю
SELECT
    GROUP_id, FIO, NAME,NU, DATE_DOK,SUMA_PDV
    FROM
    SHOW_DOCS_GROUPS(3,'01.01.2016','31.03.2021')
    WHERE  FIO='Розничный покупатель'
GROUP BY GROUP_id
группирую по номеру группы, выдает такую ошибку (смотреть рисунок)

Помогите, кто чем может.


molotokk

Цитата: cola78 від Квітень 08, 2021, 12:52:01
SELECT
    GROUP_id, FIO, NAME,NU, DATE_DOK,SUMA_PDV
    FROM
    SHOW_DOCS_GROUPS(3,'01.01.2016','31.03.2021')
    WHERE  FIO='Розничный покупатель'
GROUP BY GROUP_id

А не має бути вкінці ORDER BY
або ось так:
GROUP BY
  GROUP_id
підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com.ua" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

cola78

Цитата: molotokk від Квітень 08, 2021, 13:47:48
А не має бути вкінці ORDER BY
або ось так:
GROUP BY
  GROUP_id

К сожаленью тот же результат

admin

#3
Цитата: cola78 від Квітень 08, 2021, 12:52:01
группирую по номеру группы, выдает такую ошибку (смотреть рисунок)
Помогите, кто чем может.

Вы не понимаете сути группировки в SQL. Группировки практически не бывает без агрегатных функций, т.к. вся суть группировки теряется. Вот например _http://old.code.mu/sql/group-by.html

cola78

Цитата: admin від Квітень 08, 2021, 16:14:36
Вы не понимаете сути группировки в SQL. Группировки практически не бывает без агрегатных функций, т.к. вся суть группировки теряется. Вот например _http://old.code.mu/sql/group-by.html

Без GROUP BY сделал в редакторе шаблонов добавил заголовок группы данных и подсчет количества документов в группе через подвал группы данных (смотреть на рисунке). Работает все правильно.
Но мне нужно, чтобы отображались группы, в которых только 1 документ

molotokk

А може просто відсортуйте по кількості документів?
підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com.ua" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

cola78

Цитата: molotokk від Квітень 08, 2021, 17:20:43
А може просто відсортуйте по кількості документів?
В мене немає такого поля в SQL-запиті. Для цього треба згрупувати і підрахувати кількість в кожній групі, замкнуте коло)

molotokk

Як ви робите? через створення нового звіту? Якщо так - скиньте шаблон звіту
підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com.ua" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

cola78


Цитата: molotokk від Квітень 09, 2021, 12:05:51
Як ви робите? через створення нового звіту? Якщо так - скиньте шаблон звіту

Додаю шаблон

molotokk

І зробіть скрін вибору параметрів для звіту
підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com.ua" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

cola78

Цитата: molotokk від Квітень 09, 2021, 13:34:01
І зробіть скрін вибору параметрів для звіту
Скрін додаю.
Але параметри звіту я ще не використовував в запиті.
Дата і клієнт прописані напряму.
SELECT
    GROUP_id, FIO, NAME,NU, DATE_DOK,SUMA_PDV
    FROM
    SHOW_DOCS_GROUPS(3,'01.01.2020','01.02.2020')
    WHERE  FIO='Розничный покупатель'

admin

SELECT
  g.group_id,
  g.fio,
  g.name,
  g.nu,
  g.date_dok,
  g.suma_pdv
FROM
  show_docs_groups(3,'01.01.2020','01.02.2020') g
WHERE
  g.group_id IN
  (
    SELECT
      dg.group_id
    FROM
      doc_group dg
    GROUP BY
      dg.group_id
    HAVING
      COUNT(dg.group_id) = 1
  ) AND
  g.fio = 'Розничный покупатель'

cola78

Цитата: admin від Квітень 09, 2021, 16:10:08
SELECT
  g.group_id,
  g.fio,
  g.name,
  g.nu,
  g.date_dok,
  g.suma_pdv
FROM
  show_docs_groups(3,'01.01.2020','01.02.2020') g
WHERE
  g.group_id IN
  (
    SELECT
      dg.group_id
    FROM
      doc_group dg
    GROUP BY
      dg.group_id
    HAVING
      COUNT(dg.group_id) = 1
  ) AND
  g.fio = 'Розничный покупатель'


Дякую. Велике дякую))