Для проверки дублей в Terrasoft CRM используется запрос вида
SELECT
"tbl_Contact1"."Name" "Name",
"tbl_Contact1"."Communication1" "Communication1",
COUNT("tbl_Contact1"."ID") "Duplicates"
FROM
"tbl_Contact" "tbl_Contact1"
WHERE (
(SELECT
COUNT("tbl_Contact2"."ID") "Duplicates"
FROM
"tbl_Contact" "tbl_Contact2"
WHERE (UPPER("tbl_Contact1"."Name") = UPPER("tbl_Contact2"."Name") AND
UPPER("tbl_Contact1"."Communication1") = UPPER("tbl_Contact2"."Communication1"))) >= 2 AND
NOT UPPER("tbl_Contact1"."Name") IS NULL AND
NOT UPPER("tbl_Contact1"."Communication1") IS NULL)
GROUP BY
"tbl_Contact1"."Name",
"tbl_Contact1"."Communication1"
ORDER BY
3 DESC,
1 ASC,
2 ASC
"tbl_Contact1"."Name" "Name",
"tbl_Contact1"."Communication1" "Communication1",
COUNT("tbl_Contact1"."ID") "Duplicates"
FROM
"tbl_Contact" "tbl_Contact1"
WHERE (
(SELECT
COUNT("tbl_Contact2"."ID") "Duplicates"
FROM
"tbl_Contact" "tbl_Contact2"
WHERE (UPPER("tbl_Contact1"."Name") = UPPER("tbl_Contact2"."Name") AND
UPPER("tbl_Contact1"."Communication1") = UPPER("tbl_Contact2"."Communication1"))) >= 2 AND
NOT UPPER("tbl_Contact1"."Name") IS NULL AND
NOT UPPER("tbl_Contact1"."Communication1") IS NULL)
GROUP BY
"tbl_Contact1"."Name",
"tbl_Contact1"."Communication1"
ORDER BY
3 DESC,
1 ASC,
2 ASC
Однако, если необходимо найти также записи в которых одно из полей может быть NULL, в нашем случае, например, Средство связи 1, такой запрос эти записи не найдет.
Для этого лучше пользоваться запросом с HAVING
SELECT
"tbl_Contact1"."Name" "Name",
"tbl_Contact1"."Communication1" "Communication1",
COUNT(*) "Duplicates"
FROM
"tbl_Contact" "tbl_Contact1"
GROUP BY
"tbl_Contact1"."Name",
"tbl_Contact1"."Communication1"
HAVING COUNT(*) >=2
ORDER BY
3 DESC,
1 ASC,
2 AS
"tbl_Contact1"."Name" "Name",
"tbl_Contact1"."Communication1" "Communication1",
COUNT(*) "Duplicates"
FROM
"tbl_Contact" "tbl_Contact1"
GROUP BY
"tbl_Contact1"."Name",
"tbl_Contact1"."Communication1"
HAVING COUNT(*) >=2
ORDER BY
3 DESC,
1 ASC,
2 AS
Кроме того, что этот запрос выглядит значительно элегантнее, по моим оценкам на MS SQL Server он еще и выполняется значительно быстрее. На Oracle время выполнения примерно одинаковое.
23 декабря 2009 08:17
HAVING это, конечно, хорошо, а как поизящнее реализовать такой запрос в TS CRM?
23 декабря 2009 08:24
Дима, ты как всегда прав. Добавил по этому поводу идею http://community.terrasoft.ua/ideas/4465
23 декабря 2009 08:32
Эх, опоздал :) Алексей опередил. Хотя идея с HAVING в запросе витала в воздухе несколько лет, и решалась путем использования самодельных хранимых процедур.
23 декабря 2009 08:36
"Гамора Дмитрий" написал:Эх, опоздал :)
Кто рано встает ....
"Гамора Дмитрий" написал:Хотя идея с HAVING в запросе витала в воздухе несколько лет
почему же тогда до сих пор не реализовали???
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать