我很难找到一个好的问题标题 - 让我告诉你我拥有什么以及期望的结果是什么。我希望这可以在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做到这一点吗?怎么样?
答案 0 :(得分: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
,任何名称只会输出一次。
答案 1 :(得分:1)
我不确定“交叉”是什么意思,但你可以轻松地将你描述的结果作为两个查询对同一个表的联合。
select
t.firstname + ' ' + t.lastname
from
mytable t
union
select
t.company
from
mytable t
编辑:UNION应默认使每个SELECT不同。
答案 2 :(得分:1)
这可以满足您的需求吗?
SELECT FirstName + ' ' + LastName AS Name
FROM Contacts
UNION
SELECT CompanyName
FROM Contacts
(UNION
而不是UNION ALL
将确保顶部和底部两者的清晰度。如果您确实需要重复人名的可能性,mdma的答案将起作用。您可能需要添加{{ 1}}取决于你的需要)