2013-07-29 4 views
0

У меня есть SQL базы данных с 2 таблицы:SQL несколько таблиц с

Client

ClientID 
ClientName 
ClientBirthdate 

Адрес

ClientID 
Addressline1 
Addressline2 
Telephone1 
Telephone2 

Это возможно для клиента, чтобы иметь несколько адресов , поэтому ClientID не является уникальным значением в адресной таблице. Моя проблема в том, что я хочу отправить текстовое сообщение на каждый уникальный номер телефона. Телефон1 и Телефон2 могут быть пустыми, поэтому я понятия не имею, сколько уникальных телефонных номеров у клиента. Когда я присоединиться к ним сейчас, это выглядит примерно так:

ClientID | ClientName | Telephone1 | Telephone2 
------------------------------------------------ 
Client001 | James  | 12345  | 22312 
Client001 | James  | 12345  | 
Client002 | Alfred  |   | 11111 
Client002 | Alfred  | 11111  | 
Client002 | Alfred  | 22222  | 

Хотя то, что я хочу что-то вроде этого:

ClientID | ClientName | Number1 | Number2 
---------------------------------------------- 
Client001 | James  | 12345  | 22312 
Client001 | Alfred  | 11111  | 22222 

В настоящее время я понятия не имею, как этого добиться. Может ли кто-нибудь осветить этот вопрос?

Спасибо за внимание,

James.

EDIT: база данных уже существует и уже заполнена. Я не могу изменить структуру базы данных, я могу делать только SELECT-запросы.

+2

Что произойдет, если у клиента 3 номера телефона? – Gidil

+0

Да, вы можете создать свой первичный ключ для таблицы Address из объединенных столбцов ClientID и Addressline1. Если вы собираетесь разрешить несколько телефонных номеров, вы можете подумать о добавлении третьей таблицы для хранения телефонных номеров. Ваша третья таблица будет иметь два столбца ClientID и Telephone. –

+0

Тогда я тоже хочу. Это точно моя проблема. Мне нужны все уникальные телефонные номера, но я не знаю, сколько они могут быть. – James

ответ

0

Вот мой предложенное решение (если я правильно понял проблему):

SELECT DISTINCT CLIENTID, 
       CLIENTNAME, 
       TELEPHONE 
FROM (SELECT T1.CLIENTID, 
       T1.CLIENTNAME, 
       T2.TELEPHONE1 AS Telephone 
     FROM CLIENT T1 
       INNER JOIN (SELECT CLIENTID, 
            TELEPHONE1 
          FROM ADDRESS 
          WHERE TELEPHONE1 IS NOT NULL)T2 
         ON T1.CLIENTID = T2.CLIENTID 
     UNION 
     SELECT T1.CLIENTID, 
       T1.CLIENTNAME, 
       T2.TELEPHONE2 AS Telephone 
     FROM CLIENT T1 
       INNER JOIN (SELECT CLIENTID, 
            TELEPHONE2 
          FROM ADDRESS 
          WHERE TELEPHONE2 IS NOT NULL)T2 
         ON T1.CLIENTID = T2.CLIENTID)T 

Вы можете найти полный пример на SQL Fiddle.
Пожалуйста, дайте мне знать, если у вас есть еще вопрос по этому вопросу.

+1

Конечно. Я пытался получить каждого клиента в одной строке, но сделать это намного проще, поэтому у вас есть один уникальный номер для каждой строки. Спасибо! – James

-1

Как насчет

select distinct ClientID, ClientName, Number1 
    from ... 
union 
select distinct ClientID, ClientName, Number2 
    from ... 
    where Number2 is not null  
+0

Я пытался проголосовать за это как полезный, но, похоже, я не могу, так как у меня нет еще 15 репутации, хотя это мой собственный вопрос. Всякий раз, когда я это делаю, я вернусь за это, спасибо за помощь! – James

Смежные вопросы