SQL-запрос, который может возвращать пересекающиеся данные - PullRequest
0 голосов
/ 12 июня 2010

Мне трудно найти хорошее название вопроса - позвольте мне показать вам, что у меня есть и каков желаемый результат.Я надеюсь, что это можно сделать в SQL (у меня есть SQL Server 2008).

1) У меня есть таблица с именем Contacts, и в этой таблице у меня есть такие поля:

FirstName, LastName, CompanyName

2) Некоторые демонстрационные данные:

FirstName LastName CompanyName
John      Smith    Smith Corp
Paul      Wade  
Marc      Andrews  Microsoft
Bill      Gates    Microsoft
Steve     Gibbs    Smith Corp
Diane     Rowe     ABC Inc.

3) Я хочу получить пересекающийся список людей и компаний, но компании только один раз .Это будет выглядеть так:

Name
ABC Inc.
Bill Gates
Diane Rowe
John Smith   
Marc Andrews
Microsoft
Smith Corp
Steve Gibbs
Paul Wade

Можно ли сделать это с помощью SQL?Как?

Ответы [ 3 ]

2 голосов
/ 12 июня 2010

Вы берете все имена людей, а затем также добавляете все компании

SELECT CONCAT([First Name],' ',[Last Name]) AS Name FROM Contacts
UNION ALL
SELECT DISTINCT CompanyName FROM Contacts
   WHERE CompanyName IS NOT NULL

Ключевое слово DISTINCT гарантирует, что компании выводятся только один раз, а ГДЕ Предложение удаляет строки, в которых информация о компании не известна.

Если человек имеет то же имя, что и компания, тогда будет выведен дубликат. Если вы не хотите этого, измените UNION ALL на UNION, и любое имя будет выведено только один раз.

1 голос
/ 12 июня 2010

Делает ли это то, что вам нужно?

SELECT FirstName + ' ' + LastName AS Name
FROM Contacts 
UNION
SELECT CompanyName
FROM Contacts 

(UNION, а не UNION ALL обеспечит четкость как верхней, так и нижней частей. Ответ mdma сработает, если вам понадобится возможностьдубликаты имен людей. Возможно, вам придется добавить ORDER BY Name в зависимости от ваших потребностей)

1 голос
/ 12 июня 2010

Я не уверен, что вы подразумеваете под "пересечением", но вы можете легко получить результаты, которые вы описываете как объединение двух запросов к одной и той же таблице.

select
    t.firstname + ' ' + t.lastname
from
    mytable t
union
select
    t.company
from
    mytable t

Редактировать: UNION должен выделять каждый элемент SELECT по умолчанию.

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