Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 可以返回相交数据的SQL查询_Sql Server_Sql Server 2008_Sql - Fatal编程技术网

Sql server 可以返回相交数据的SQL查询

Sql server 可以返回相交数据的SQL查询,sql-server,sql-server-2008,sql,Sql Server,Sql Server 2008,Sql,我很难找到一个好的问题标题——让我告诉你我有什么,期望的结果是什么。我希望这可以在SQL中完成(我有SQL Server 2008) 1) 我有一个名为Contacts的表,在该表中我有如下字段: FirstName, LastName, CompanyName 2) 一些演示数据: FirstName LastName CompanyName John Smith Smith Corp Paul Wade Marc Andrews Microsoft

我很难找到一个好的问题标题——让我告诉你我有什么,期望的结果是什么。我希望这可以在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来做这件事吗?怎么做?

我不知道你说的“相交”是什么意思,但是你可以很容易地得到你描述为对同一个表的两个查询的并集的结果

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

编辑:默认情况下,UNION应该使每个SELECT都不同。

我不确定“相交”是什么意思,但您可以很容易地得到您描述为针对同一个表的两个查询的UNION的结果

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

编辑:默认情况下,UNION应使每个选择都不同。

这是否满足您的需要

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

(使用
UNION
而不是
UNION-ALL
将确保顶部和底部的清晰性。如果您确实需要重复人名,mdma的答案将起作用。您可能需要根据需要添加
按姓名排序

这是否满足您的需要

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

(使用
UNION
而不是
UNION-ALL
将确保顶部和底部的清晰性。如果您确实需要重复人名,mdma的答案将起作用。您可能需要根据需要添加
按姓名排序

您接受所有人名,然后再加上所有的公司

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
,任何名称只输出一次。

您将获取所有人名,然后添加所有公司

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
,任何名称将只输出一次。

看到每个人对相同答案的细微差别很有趣。看到每个人对相同答案的细微差别很有趣。