2013-09-11 6 views
0

У меня есть две таблицы для хранения информации о лицах. Один Сохраняет имя пользователя и адрес, а другой содержит несколько телефонных номеров, связанных с внешним ключом, с идентификатором пользователя. Теперь я хочу создать представление, где только я показывал только одну строку и в столбце номера телефона, все телефонные номера, связанные с этим пользователем, должны быть перечислены. Я попробовал Full Join, и он дает мне одного и того же пользователя несколько раз в зависимости от того, сколько телефонного номера у пользователя есть.SQL View Показывает один и тот же идентификатор

Сейчас код выглядит следующим образом для создания представления

CREATE VIEW StudentData AS ВЫБОР COALESCE (Students.FirstName + '', ' ') + COALESCE (Students.LastName,'') AS 'Name', COALESCE (Students.City + ',', '') + COALESCE (Students.Country + ',', '') + COALESCE (Phone.PhoneType, '') + COALESCE (Phone.PhoneNumber + ',', '') + COALESCE (Students.StreetAdress + ',', '') + COALESCE (CAST (Students.ZipCode AS varchar (10)), '') AS 'Адрес', COALESCE (CAST (учащиеся .Birthdate AS varchar (11)) + ',', '') + COALESCE (Students.StudentType, '') AS 'Information' от студентов полного соединения телефона на Students.StudentID = Phone.StudentID

Спасибо заранее

+0

Есть несколько пустых способов сделать это (обычно это зависит от особенностей системы баз данных, поэтому, пожалуйста, добавьте тег для вашей РСУБД). Было бы лучше, если возможно, сделать это * форматирование * на другом уровне, а не пытаться сделать это в базе данных. –

+1

с помощью STUFF это может быть выполнено. – Sasidharan

+0

@UpvoteMarkAnswer - Мне всегда смешно, что люди фокусируются на 'STUFF' как на« волшебном »способе сделать это, когда на самом деле все, за что отвечает вызов« STUFF' », - это обрезка ведущая запятая. Это часть 'xml path', которая больше отвечает за конкатенацию. –

ответ

3

Это проблема конкатенации. Запрос выглядит примерно так в SQL Server:

create view v_userphone 
    select u.username, u.address, 
      stuff((select ','+phonenumber 
        from userphone up 
        where up.userid = u.userid 
        for xml path ('') 
       ), 1, 1, '' 
       ) as phonenumbers 
    from users u; 
+0

Спасибо большое! Это сделало мой день :-) – ccb3

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