Sql 多次合并同一个表
我在一个部门有两张表,每个人都有多个部门对他进行登记Sql 多次合并同一个表,sql,sql-server,Sql,Sql Server,我在一个部门有两张表,每个人都有多个部门对他进行登记 Person id|name|dept1|dept2|dept3 1 |Jane|100 |102 |106 Dept id |Name 100|Accounts ... 102|HR ... 106|Admin 显示Jane记录最优雅的sql是什么,如下所示: Jane|Accounts|HR|Admin 用这个。并遵循命名约定,使所有列名独立于表而唯一 SELECT Person.id, Person.name, de
Person
id|name|dept1|dept2|dept3
1 |Jane|100 |102 |106
Dept
id |Name
100|Accounts
...
102|HR
...
106|Admin
显示Jane记录最优雅的sql是什么,如下所示:
Jane|Accounts|HR|Admin
用这个。并遵循命名约定,使所有列名独立于表而唯一
SELECT
Person.id, Person.name, dept1.Name, dept2.Name, dept3.Name
LEFT JOIN Dept dept1 ON dept1.id = Person.dept1
LEFT JOIN Dept dept2 ON dept2.id = Person.dept2
LEFT JOIN Dept dept3 ON dept3.id = Person.dept3
类似这样的操作将允许您多次加入同一个表。您只需为每个join指定一个不同的别名
SELECT *
FROM Person AS P
INNER JOIN Dept AS D1 ON P.dept1 = D1.id
INNER JOIN Dept AS D2 ON P.dept2 = D2.id
WHERE P.name = 'Jane'
理想情况下,您可以规范化Person表中的数据,并在Person和Dept之间建立一个链接表,例如,PersonDepartmentLinking
(或任何链接表命名约定的约定),前提是您可以控制模式,并且可以通过这种方式添加关系 在这种情况下可以使用
Select name,
Stuff((Select distinct ', ' + cast(Name as varchar(20))
From #Dept t2
Where t2.Id = t1.Id
FOR XML PATH('')),1,1,'')
From Person t1
我知道的唯一方法是为每列创建一个联接。 但是如果您正在设计表,我建议您规范化DB。 如果某人需要一个额外的dept列,则需要修改该表以添加person的新属性 对于我来说,需要3个实体: -人 -系
-人员/部门/分配为什么不试一试?这个问题似乎离题了,因为OP似乎没有尽力找到解决方案。@帕特里克霍夫曼快速搜索一下会给他一些解决方案。无论如何,使用Pivot和UnPivot可能会对他有所帮助