Страница 1 из 2
Подсчет уникальных записей
Добавлено: 07 окт 2017, 16:29
hirurg
Привет Всем!
Проблема. Уже много чего перепробовал, но ничего не помогает.
Задача.
Есть таблица с разными записями, некоторые повторяются, но требуется их подсчитать именно уникальных записей в таблице.
например:
школа
школа1
ЖД
ЖД1
школа2
школа
жд
итог: 5 записей
Пробовал скрипты и калькуляции, такие как ExecuteSQL (
"SELECT DISTINCT \"FruitNameField\"
FROM \"FruitTableName\")
Надеюсь на вашу помощь. Заранее всем спасибо.
Re: Подсчет уникальных записей
Добавлено: 07 окт 2017, 18:26
andrey volkov
Сделайте поле-калькуляцию с формулой Upper(искомое поле)
и уже по этому полю делайте запрос SELECT DISTINCT...
Re: Подсчет уникальных записей
Добавлено: 07 окт 2017, 18:37
hirurg
не могу разобраться в синтаксисе ExecuteSQL (
"SELECT DISTINCT \"FruitNameField\"
FROM \"FruitTableName\")
как правильно все расписать?
Re: Подсчет уникальных записей
Добавлено: 08 окт 2017, 06:28
andrey volkov
ExecuteSQL ("SELECT DISTINCT FruitNameField FROM FruitTableName"; ""; "")
Re: Подсчет уникальных записей
Добавлено: 08 окт 2017, 10:23
hirurg
- Снимок экрана 2017-10-08 в 17.20.07.png (57.94 КБ) 13233 просмотра
Re: Подсчет уникальных записей
Добавлено: 08 окт 2017, 18:33
Arcady
Функция ExecuteSQL выполняет SQL запрос который передается ей в параметре как текстов строка. Еще два обязательных параметра это символы разделителя между колонками и между строками. Также можно передать в функцию какие-то дополнительные значения (например значения полей или переменных) в виде параметров самого запроса
В простом случае имеем:
Код: Выделить всё
ExecuteSQL ("текст самого SQL запроса"; "" ; "" )
последние два параметра по умолчанию можно оставить пустыми.
В самом SQL запросе могут потребоваться кавычки, например для указания параметра запроса (в виде текста), либо если используемые названия полей или таблиц содержат пробелы (тогда название нужно заключить в кавычки). Нет нужды говорить, что кавычки должны быть экранированы.
Соотвественно:
Код: Выделить всё
ExecuteSQL ("SELECT DISTINCT FruitNameField FROM FruitTableName"; ""; "")
вполне корректная запись.
Если запрос не работает, то в первую очередь надо проверить:
- корректность написания названия поля и таблицы (примитивно, но бывает же)
- наличие в графе реляций таблицы FruitTableName, так в ExecuteSQL "понимает" только те названия таблиц, которые есть на графе Relationships
Однако в самом топике шла речь о количестве тут мы могли бы использовать COUNT(), но в FM COUNT (DISTINCT ) почему-то не работает, как и DISTINCT COUNT()
Можно использовать
Код: Выделить всё
ValueCount ( ExecuteSQL ("SELECT DISTINCT FruitNameField FROM FruitTableName"; ""; "") )
Но в любом случае такие значения как: "школа" и "школа1" будут рассматриваться как уникальные значения. Нужно как-то очищать их от "мусора" предварительно. Может используя Filter или что-то еще, в зависимости от типа мусора,
Re: Подсчет уникальных записей
Добавлено: 09 окт 2017, 15:47
hirurg
Ну вы просто гении! Получилось! Супер!
Но сам бы я до этого не допетрил.
Нужно было делать с реляцией.
Спасибо вам за помощь, подробное разжевывание!
выкладываю пример. Думаю многим пригодится.
Re: Подсчет уникальных записей
Добавлено: 09 окт 2017, 16:17
Arcady
На конференцию приходите, там гениев будет полный зал
Re: Подсчет уникальных записей
Добавлено: 09 окт 2017, 16:32
hirurg
Спасибо. Я бы с удовольствием, но лететь далеко:) точнее сначала ехать 400 км до Новосибирска, потом лететь в Москву. Но на будущее запланирую.
Re: Подсчет уникальных записей
Добавлено: 15 окт 2017, 21:01
Alexei Sytch
Попробуйте ExecuteSQL ("SELECT COUNT( DISTINCT UPPER(FruitNameField) ) FROM FruitTableName"; ""; "").
У меня работает на 16 и на 15
P.S.Без SQL уникальный список значений можно получать с помощью custom function
http://www.briandunning.com/cf/596
Скрипт будет выглядеть как-то так
Set Field ["Количество" ; "ValueCount( UniqueValues ( $$list_of_values) ) "]
Реляция в вашем примере нужна была только что бы на макете показать записи из второй таблицы. Для самого SQL запроса она не нужна