Подсчет уникальных записей
Подсчет уникальных записей
Привет Всем!
Проблема. Уже много чего перепробовал, но ничего не помогает.
Задача.
Есть таблица с разными записями, некоторые повторяются, но требуется их подсчитать именно уникальных записей в таблице.
например:
школа
школа1
ЖД
ЖД1
школа2
школа
жд
итог: 5 записей
Пробовал скрипты и калькуляции, такие как ExecuteSQL (
"SELECT DISTINCT \"FruitNameField\"
FROM \"FruitTableName\")
Надеюсь на вашу помощь. Заранее всем спасибо.
Проблема. Уже много чего перепробовал, но ничего не помогает.
Задача.
Есть таблица с разными записями, некоторые повторяются, но требуется их подсчитать именно уникальных записей в таблице.
например:
школа
школа1
ЖД
ЖД1
школа2
школа
жд
итог: 5 записей
Пробовал скрипты и калькуляции, такие как ExecuteSQL (
"SELECT DISTINCT \"FruitNameField\"
FROM \"FruitTableName\")
Надеюсь на вашу помощь. Заранее всем спасибо.
- Вложения
-
- подсчет уникальных записей.fmp12.zip
- (70.72 КБ) 493 скачивания
-
- Сообщения: 338
- Зарегистрирован: 11 сен 2017, 13:42
- Откуда: Санкт-Петербург
Re: Подсчет уникальных записей
Сделайте поле-калькуляцию с формулой Upper(искомое поле)
и уже по этому полю делайте запрос SELECT DISTINCT...
и уже по этому полю делайте запрос SELECT DISTINCT...
Re: Подсчет уникальных записей
не могу разобраться в синтаксисе ExecuteSQL (
"SELECT DISTINCT \"FruitNameField\"
FROM \"FruitTableName\")
как правильно все расписать?
"SELECT DISTINCT \"FruitNameField\"
FROM \"FruitTableName\")
как правильно все расписать?
-
- Сообщения: 338
- Зарегистрирован: 11 сен 2017, 13:42
- Откуда: Санкт-Петербург
Re: Подсчет уникальных записей
ExecuteSQL ("SELECT DISTINCT FruitNameField FROM FruitTableName"; ""; "")
Re: Подсчет уникальных записей
Функция ExecuteSQL выполняет SQL запрос который передается ей в параметре как текстов строка. Еще два обязательных параметра это символы разделителя между колонками и между строками. Также можно передать в функцию какие-то дополнительные значения (например значения полей или переменных) в виде параметров самого запроса
В простом случае имеем:
последние два параметра по умолчанию можно оставить пустыми.
В самом SQL запросе могут потребоваться кавычки, например для указания параметра запроса (в виде текста), либо если используемые названия полей или таблиц содержат пробелы (тогда название нужно заключить в кавычки). Нет нужды говорить, что кавычки должны быть экранированы.
Соотвественно:
вполне корректная запись.
Если запрос не работает, то в первую очередь надо проверить:
- корректность написания названия поля и таблицы (примитивно, но бывает же)
- наличие в графе реляций таблицы FruitTableName, так в ExecuteSQL "понимает" только те названия таблиц, которые есть на графе Relationships
Однако в самом топике шла речь о количестве тут мы могли бы использовать COUNT(), но в FM COUNT (DISTINCT ) почему-то не работает, как и DISTINCT COUNT()
Можно использовать
Но в любом случае такие значения как: "школа" и "школа1" будут рассматриваться как уникальные значения. Нужно как-то очищать их от "мусора" предварительно. Может используя Filter или что-то еще, в зависимости от типа мусора,
В простом случае имеем:
Код: Выделить всё
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"; ""; "") )
Re: Подсчет уникальных записей
Ну вы просто гении! Получилось! Супер!
Но сам бы я до этого не допетрил.
Нужно было делать с реляцией.
Спасибо вам за помощь, подробное разжевывание!
выкладываю пример. Думаю многим пригодится.
Но сам бы я до этого не допетрил.
Нужно было делать с реляцией.
Спасибо вам за помощь, подробное разжевывание!
выкладываю пример. Думаю многим пригодится.
- Вложения
-
- FruitTableName.fmp12.zip
- (136.42 КБ) 500 скачиваний
Re: Подсчет уникальных записей
Код: Выделить всё
Ну вы просто гении! Получилось! Супер!
Re: Подсчет уникальных записей
Спасибо. Я бы с удовольствием, но лететь далеко:) точнее сначала ехать 400 км до Новосибирска, потом лететь в Москву. Но на будущее запланирую.
-
- Сообщения: 106
- Зарегистрирован: 21 сен 2017, 18:48
- Откуда: Минск
Re: Подсчет уникальных записей
Попробуйте 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 запроса она не нужна
У меня работает на 16 и на 15
P.S.Без SQL уникальный список значений можно получать с помощью custom function http://www.briandunning.com/cf/596
Скрипт будет выглядеть как-то так
Set Field ["Количество" ; "ValueCount( UniqueValues ( $$list_of_values) ) "]
Реляция в вашем примере нужна была только что бы на макете показать записи из второй таблицы. Для самого SQL запроса она не нужна