2010-06-12 49 views
0

我很難找到一個好問題標題 - 讓我告訴你我有什麼以及期望的結果。我希望這可以在SQL中完成(我有SQL Server 2008)。可以返回相交數據的SQL查詢

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來做這個嗎?怎麼樣?

回答

1

我不確定您的意思是「相交」,但您可以輕鬆地將您描述的結果作爲針對同一個表的兩個查詢的聯合。

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

編輯:UNION應使每個SELECT在默認情況下不同。

1

這是否做你所需要的?

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

(該UNION而不是UNION ALL將確保頂部和底部的清晰度。如果你需要重複人名的可能性搖頭丸的答案會工作,你可能需要添加一個ORDER BY Name根據您的需要)

2

你把所有的人的名字,然後還要加上所有的公司

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

DISTINCT關鍵字確保公司輸出只有一次,而WHERE 子句刪除未知公司信息的行。

如果某人的姓名與公司相同,則會輸出重複。如果您不想要,那麼將UNION ALL更改爲UNION,並且任何名稱只會輸出一次。

+0

有趣的是,每個人的細微差別都有相同的答案。 – 2010-06-12 18:29:38