使用每个对的一个通用列来连接表

早上好,

我得到了一个命令,将excel中的报告与我从SQL Server DB中提取的信息进行合并。 我有这些表,我需要join,如下所示:

DID DName 1 Finance 2 Engineering 3 Administration 

用户

 UID UName RID 1 Takamiya Aido 5 2 Yagari Touga 4 3 Kain Akatsuki 3 4 Kuran Kaname 2 5 Kiryuu Zero 1 

angular色

 RID RName 1 Executive Secretary 2 Maintenance Supervisor 3 Boilermaker 4 Fitter 5 Payroll Clerk 

元数据

 MID RID Value 1 3 Engineering 2 2 Engineering 3 4 Engineering 4 5 Finance 5 1 Administration 

CostCenters

 CID Code Description 1 154 Administration 2 263 Mobiles 3 363 Services 4 554 General Accounts 5 654 Payroll Processing 

DeptCost

 ID DID CID 1 1 5 2 2 2 3 2 3 4 3 1 5 3 4 

我使用的代码如下:

 SELECT D.DName, U.UName, R.RName, C.Code, C.Description FROM Department D INNER JOIN MetaData MD ON D.DptName = MD.Value INNER JOIN User U ON MD.RoleID = U.RoleID INNER JOIN Role R ON U.RoleID = R.RID FULL JOIN DeptCost DC ON D.DeptID = DC.DeptId FULL JOIN Cost C ON DC.CostId = C.CId ORDER BY MD.Value 

预期的结果是这样的:

 Dname UName RName Code Description Finance Takamiya Aido Payroll Clerk 654 Payroll Proc Engineering Yagari Touga Fitter 263 Mobiles Engineering Kain Akatsuki Boilermaker 363 Services Engineering Kuran Kaname Maintenance Sup Administration Kiryuu Zero Executive Secretary 154 Administration Administration 554 General Accounts 

实际结果是这样的:

 Dname UName RName Code Description Finance Takamiya Aido Payroll Clerk 654 Payroll Proc Engineering Yagari Touga Fitter 263 Mobiles Engineering Yagari Touga Fitter 363 Services Engineering Kain Akatsuki Boilermaker 263 Mobiles Engineering Kain Akatsuki Boilermaker 363 Services Engineering Kuran Kaname Maintenance Sup 263 Mobiles Engineering Kuran Kaname Maintenance Sup 363 Services Administration Kiryuu Zero Executive Secretary 154 Administration Administration Kiryuu Zero Executive Secretary 554 General Accounts 

在这里 , 在 这里 ,以及谷歌,我已经尝试了解决scheme。 我可以得到部门和用户,部门和成本,但我不能做他们三个。 要获得部门中的用户,我必须从MetaData中获取部门,joinangular色和angular色获取用户表。 你可以看到,部门和成本中心是直接的。

我尝试了从这里的例子得到的其他选项,但没有得到预期的结果。 如果你说只有CTE或分区是解决scheme,请让他们成为解决scheme,因为我已经尝试过了,我不能清楚地解释它们是如何工作的,对一些人来说可能很简单,但是我无法把握。 不知道我将如何得到我的MCSE没有它。

如果这不能在SQL中工作,只有Excel本身就是解决scheme,那么我将直接指向自己。 没有手动伪造数据,然后向我的老板提出一个随机的借口,为什么它不会自动更新,我不明白这一点。

任何进一步的解释,只要问。 呵呵,不能碰数据库结构,某些数据因为机密而被省略了。

提前致谢。

编辑:老板想按部门列出所有用户,他希望每个部门的成本中心。 我在Excel中创build了2个工作表,一个用于用户,另一个用于成本中心,但他要求在同一张工作表上放在一起。

因此,您可能只有1个成本中心,5个员工的部门,也可能有5个成本中心和3个员工的部门。 实际上,用户和成本中心只有部门相同,本身不相关。

这是要求的小提琴。 http://sqlfiddle.com/#!3/477d9/1

在你的查询中在ORDER BY之前添加这个子句:

 GROUP BY D.DName, U.UName, R.RName 

然后编写聚合函数或子查询,这些函数或子查询将执行您想要计算CodeDescription的规则。

从你的问题来看,这些规则是什么都不清楚。 例如,对于Yagari Touga ,你为什么要在最终结果中使用Mobiles而不是Services ? 如果你不告诉我们逻辑是什么的话,我不能告诉你如何编码逻辑。