2012-07-30 38 views
0

试图梳理这一点的来源......联盟2表和设定值基于数据

我需要一个查询,将两个表合并成1,我有以下...

select PersonId, PersonFirstName, PersonLastName 
from dbo.Person 
UNION 
SELECT AdminId as PersonsId, AdminFirstName as PersonsFirstName, AdminLastName as  PersonsLastName 
from dbo.UserAdmins 

我想创建一个新列,并根据记录的来源分配“Person”或“Admin”的值。因此,如果记录1-10来自dbo.Person,则新列将以“Person”填充,并且如果下一个5来自Admin,则新列将以“Admin”填充。

这似乎相对简单,但不知道从哪里开始。

回答

3

你只需要你想要的值,添加新列:

select PersonId 
    , PersonFirstName 
    , PersonLastName 
    , 'Person' as yourColName 
from dbo.Person 
UNION ALL 
SELECT AdminId as PersonsId 
    , AdminFirstName as PersonsFirstName 
    , AdminLastName as  PersonsLastName 
    , 'Admin' as yourColName 
from dbo.UserAdmins 
+0

+1,但你真的应该让'UNION ALL'而不是'UNION'。 'UNION'中每个子查询的行根据源标识符的字面意义是不同的:一个简单的'UNION'必须对结果进行排序并将其解除无效。使用'UNION ALL'删除额外开销。 – 2012-07-30 18:09:34

+0

@NicholasCarey正确,改变了它。 – Taryn 2012-07-30 18:10:49

+0

谢谢。我没有意识到这很简单。 – user1366606 2012-07-30 18:17:26