SQL - 将计数器追加到查询输出

时间:2016-09-08 23:38:30

标签: sql sql-server-2012 azure-sql-database

我正在为我的公司创建组织结构图,并且要创建图表,数据必须具有唯一的角色标识符,以及对角色的独特报告。每行的标识符。不幸的是,我的数据并没有打球,而且我的范围也没有改变来源。

我有两个源表,在下图中简化了。重要的是要注意数据中的一些内容。

  1. 查询中的员工经理需要来自[EmpData]表。 ' ReportsTo'字段仅在角色空置时使用的[Role]表中
  2. 任何数量的员工都可以担任相同的角色,但为了简单起见,我们假设“&em>报告”中只有一个人。作用
  3. Image of source tables and desired Query output
    使用这个样本数据,我的查询如下:

    /**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等突出显示的黄色。

1 个答案:

答案 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",他们只是"操作",但这也可以解决。

希望这能满足您的需求!