早上好,
我收到了一份命令,要在excel中合并一份报告,其中包含我从SQL Server DB中提取的信息。我有这些表需要加入,如下:
系
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
作用
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
我在Here,Here,Here以及Google中尝试过这些解决方案。我可以得到部门和用户,部门和成本,但我不能做他们三个。要获得部门中的用户,我必须从MetaData能够获得部门,将其与角色一起加入,并从角色获取用户表。如您所见,Depts和Cost Center是直截了当的。
我已经尝试了从这里的示例中得到的其他选项,但没有得到预期的结果。如果你说只有CTE或分区是解决方案,那么请让它们成为解决方案,因为我已经尝试过,我无法清楚地解释它们是如何工作的,对某些人来说可能很简单,但我不能抓住它。不知道如果没有它我将如何获得我的MCSE。
如果这在SQL中不起作用,只有Excel本身就是解决方案,我会指导自己。如果没有手动伪造数据,然后随便向我的老板说明为什么它不会自动更新,我就不会这样做。
任何进一步的解释,请问。哦,无法触及数据库结构,并且由于机密性而忽略了某些数据。
提前致谢。
编辑: 老板想按部门列出所有用户,他想要每个部门的成本中心。我在Excel中创建了包含2个工作表的报告,一个用于用户,另一个用于成本中心,但是他要求在同一张纸上将它们放在一起。
因此,您可能只有1个成本中心但有5名员工的部门,或者您可能拥有5个成本中心和3个员工的部门。实际上,用户和成本中心只有共同的部门,而不是相关的部门。
这是要求的小提琴。 http://sqlfiddle.com/#!3/477d9/1
答案 0 :(得分:1)
在查询中的ORDER BY
之前添加此子句:
GROUP BY D.DName, U.UName, R.RName
然后编写聚合函数或子查询,以强制执行计算Code
和Description
所需的规则。
从您的问题中不清楚这些规则是什么。例如,对于Yagari Touga
,为什么在最终结果中需要Mobiles
而不是Services
?如果您不告诉我们逻辑是什么,我无法告诉您如何对逻辑进行编码。