Проблема TSQL Query - PullRequest
       1

Проблема TSQL Query

1 голос
/ 08 августа 2011

Я застрял в запросе, где есть таблица CUSTOMER и PHONE.

Это отношение один ко многим, в котором CUSTOMER и имеют много PHONE чисел

Таблица выглядит следующим образом:

---CUSTOMER---
cust_ID
cust_Name

---PHONE---
cust_ID
Phone_type (M or O for mobile/office respectively)
phone_no

Я хочу написать запрос, в котором результат будет похож на следующий:

cust_name | M_Phone | O_Phone

Где M_Phone - номер мобильного телефона, а O_Phone - номер офиса.

Ответы [ 2 ]

3 голосов
/ 08 августа 2011
select C.cust_Name,
       PM.phone_no as M_Phone,
       PO.phone_no as O_Phone
from CUSTOMER as C
  left outer join @PHONE as PM
    on C.cust_ID = PM.cust_ID and
       PM.phone_no = 'M'
  left outer join PHONE as PO
    on C.cust_ID = PO.cust_ID and
       PO.phone_no = 'O'

Приведенный выше запрос даст вам клиентов без каких-либо телефонных номеров.Если вы хотите, чтобы у клиента был только телефон, добавьте предложение where.

where PM.phone_no is not null or
      PO.phone_no is not null 
0 голосов
/ 08 августа 2011

В некоторых СУБД это будет работать:

SELECT M.Cust_ID, M.Phone_No AS M_Phone, O.Phone_No AS O_Phone
  FROM (SELECT Cust_ID, Phone_No FROM Phone WHERE Phone_Type = 'M') AS M
  FULL OUTER JOIN
       (SELECT Cust_ID, Phone_No FROM Phone WHERE Phone_Type = 'O') AS O
    ON M.Cust_ID = O.Cust_ID;

FULL OUTER JOIN выберет клиентов с мобильным и офисным телефоном или только с одним, но не с другим. Если вы также хотите перечислить клиентов, у которых нет ни одного, вам нужен немного другой запрос (и вам нужно будет обратиться к таблице Customer).

Обратите внимание, что это не выбирается из таблицы клиентов; Я предполагаю, что в таблице Phone нет значений идентификаторов клиентов, которых также нет в таблице Customer (поэтому у вас есть правильные ограничения ссылочной целостности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...