【发布时间】:2016-03-25 02:30:51
【问题描述】:
早安,
我接到命令将 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
成本中心
CID Code Description
1 154 Administration
2 263 Mobiles
3 363 Services
4 554 General Accounts
5 654 Payroll Processing
部门成本
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 中的解决方案。我可以得到 Dept 和 Users、Dept 和 Costs,但我不能做到这三个。要获取部门中的用户,我必须从 MetaData 中获取部门,将其与角色连接起来,并从角色中获取用户表。如您所见,部门和成本中心是直截了当的。
我尝试了从此处的示例派生的其他选项,但没有得到预期的结果。如果您说只有 CTE 或分区是解决方案,请让它们成为解决方案,因为我已经尝试过,但我无法清楚地解释它们是如何工作的,对某些人来说可能很简单,但我无法掌握。不知道没有它我将如何获得我的 MCSE。
如果这在 SQL 中不起作用并且只有 Excel 本身是解决方案,我将自己引导到那里。没有手动伪造数据然后向我的老板随机找借口解释为什么它不自动更新,我不明白这一点。
任何进一步的解释,只是问。哦,不能动DB结构,有些数据因为保密原因被省略了。
提前致谢。
编辑: 老板想要按部门列出所有用户的列表,并且他想要每个部门的成本中心。我在 Excel 中创建了包含 2 个工作表的报告,一个用于用户,另一个用于成本中心,但是他要求将它们全部放在同一张表上。
因此,您的部门可能只有 1 个成本中心但有 5 名员工,或者您的部门可能有 5 个成本中心和 3 名员工。实际上,用户和成本中心只有部门的共同点,本身没有关联。
这是所要求的小提琴。 http://sqlfiddle.com/#!3/477d9/1
【问题讨论】:
-
您有 两个
DeptCosts 用于某些部门,并且无法让系统知道您喜欢哪个 一个。它怎么知道,对于某些成本中心行,您想删除某些user列?你需要告诉它。然而,这似乎是前端的一项工作,根据前一行进行空白 - 不是真正的数据库引擎,它正在做它应该做的事情。一些 SQL 方言确实有这类命令,但我不确定 2008 R2 是否有。 -
尝试使用sqlfiddle.com 使用您的查询创建表和数据,并在此处发布小提琴。这将使我们更容易为您提供帮助。
标签: sql-server excel tsql join sql-server-2008-r2