Я постараюсь описать реальную ситуацию. В нашей компании есть система бронирования с таблицей, назовем ее Клиенты , где электронная почта и телефонные контакты сохраняются при каждом входящем заказе - это часть системы, которую я не могу изменить. Я сталкиваюсь с проблемой, как подсчитать количество уникальных клиентов. Под уникальным клиентом я подразумеваю группу людей, у которых одинаковый адрес электронной почты или номер телефона.
Пример 1 : Из реальной жизни вы можете представить себе Тома и Сандру, которые женаты. Том, который заказал 4 продукта, заполнил в нашей системе бронирования 3 разных адреса электронной почты и 2 разных телефонных номера, когда один из них поделился с Сандрой (в качестве домашнего телефона), поэтому я могу предположить, что они как-то связаны. Сандра, кроме этого общего номера телефона, также заполнила свой личный номер, и для обоих заказов она использовала только один адрес электронной почты. Для меня это означает считать все из следующих строк одним уникальным клиентом . Так что на самом деле этот уникальный клиент может вырасти во всю семью.
ID E-mail Phone Comment
---- ------------------- -------------- ------------------------------
0 tom@email.com +44 111 111 First row
1 tommy@email.com +44 111 111 Same phone, different e-mail
2 thomas@email.com +44 111 111 Same phone, different e-mail
3 thomas@email.com +44 222 222 Same e-mail, different phone
4 sandra@email.com +44 222 222 Same phone, different e-mail
5 sandra@email.com +44 333 333 Same e-mail, different phone
Как сказал ypercube , мне, вероятно, понадобится рекурсия для подсчета всех этих уникальных клиентов .
Пример 2 : Вот пример того, что я хочу сделать.
Можно ли получить количество уникальных клиентов без использования рекурсии, например: используя курсор или что-то еще или необходима рекурсия?
ID E-mail Phone Comment
---- ------------------- -------------- ------------------------------
0 linsey@email.com +44 111 111 ─┐
1 louise@email.com +44 111 111 ├─ 1. unique customer
2 louise@email.com +44 222 222 ─┘
---- ------------------- -------------- ------------------------------
3 steven@email.com +44 333 333 ─┐
4 steven@email.com +44 444 444 ├─ 2. unique customer
5 sandra@email.com +44 444 444 ─┘
---- ------------------- -------------- ------------------------------
6 george@email.com +44 555 555 ─── 3. unique customer
---- ------------------- -------------- ------------------------------
7 xavier@email.com +44 666 666 ─┐
8 xavier@email.com +44 777 777 ├─ 4. unique customer
9 xavier@email.com +44 888 888 ─┘
---- ------------------- -------------- ------------------------------
10 robert@email.com +44 999 999 ─┐
11 miriam@email.com +44 999 999 ├─ 5. unique customer
12 sherry@email.com +44 999 999 ─┘
---- ------------------- -------------- ------------------------------
----------------------------------------------------------------------
Result ∑ = 5 unique customers
----------------------------------------------------------------------
Я пробовал запрос с помощью GROUP BY, но я не знаю, как сгруппировать результат по первому или второму столбцу. Я ищу, скажем, что-то вроде
SELECT COUNT(*) FROM Customers
GROUP BY Email OR Phone
Еще раз спасибо за любые предложения
P.S.
Я действительно ценю ответы на этот вопрос, прежде чем перефразировать. Теперь ответы здесь могут не соответствовать обновлению, поэтому, пожалуйста, не понижайте голос здесь, если вы собираетесь это сделать (кроме вопроса, конечно:) . Я полностью переписал этот пост.
Спасибо и извините за неправильный запуск.