我正在为我的公司创建组织结构图,并且要创建图表,数据必须具有唯一的角色标识符,以及对角色的独特报告。每行的标识符。不幸的是,我的数据并没有打球,而且我的范围也没有改变来源。
我有两个源表,在下图中简化了。重要的是要注意数据中的一些内容。
/**Join Role table with employee data table.
/**Right join so roles with more than one employee will generate a row each
SELECT [Role].RoleId As PositionId
,[EmpData].ReportsToRole As ReportsToPosition
,[Role].RoleTitle
,[Empdata].EmployeeName
FROM [Role]
RIGHT JOIN [EmpData] ON [Role].RoleId=[EmpData].[Role]
UNION
/** Output all roles that do not have a holder, 'VACANT' in employee name.
SELECT [Role].RoleId
,[Role].ReportsToRole
,[Role].RoleTitle
,'VACANT'
FROM [Role]
WHERE [Role].RoleID NOT IN (SELECT RoleID from [empdata])
这几乎创建了预期的输出,但每个操作员角色在PositionId列中都有' OPER&#39 ;.
要使图表软件起作用,每个位置必须具有唯一标识符。
有关如何实现这一结果的任何想法?我特意追踪所需的查询输出中附加的-01,-02,-03等突出显示的黄色。
答案 0 :(得分:1)
如果您使用的是T-SQL,则应考虑将ROW_NUMBER
运算符与PARTITON BY
命令一起使用,并将该列与现有列结合使用。
具体而言,您可以在选择ROW_NUMBER () OVER (PARTITION BY PositionID ORDER BY ReportsToPosition,EmployeeName) AS SeqNum
我会将其添加到您的第一个查询中,然后,在您的第二个查询中,我会执行SELECT PositionID + CASE SeqNum WHEN 1 THEN "" ELSE "-"+CAST(SeqNum AS VarChar(100)),...
有多种方法可以做到这一点,但这会遗漏那些不需要" -1"并且只将其添加到其余部分。这和你的方案之间的主要区别在于它不包含" 0"在左边垫,这很容易做,第一个"操作"是" OPER-1",他们只是"操作",但这也可以解决。
希望这能满足您的需求!