【发布时间】:2019-08-08 11:48:39
【问题描述】:
我的表Employee、Function和Company之间的关系位于[Employee_Scope]
在Employee_Scope 中,我们有一个名为[SortOrder] 的订单列。
Main Function 是特定员工的SortOrder != NULL and SortOrder = MIN(SortOrder) 范围内的函数。
次要功能是其余的。
这里的 Main functionId 是“1”。
次要 functionId 为 54。
函数本身可以在[Employee_Function] 表中找到。
我已经使用以下查询提取了所有函数:
SELECT [le].[EmployeeId], [le].[FunctionId], ROW_NUMBER() OVER(PARTITION BY [le].[EmployeeId] ORDER BY [le].[SortOrder] ASC) AS [RealOrder]
FROM (
SELECT [e].[EmployeeId], [es].[FunctionId], ISNULL([es].[SortOrder], 0) AS [SortOrder]
FROM [dbo].[Employee] [e]
INNER JOIN [dbo].[Employee_Scope] AS [es] ON [es].[EmployeeId] = [e].[EmployeeId]
WHERE es.SortOrder != NULL
HAVING es.SortOrder !=MIN(es.SortOrder) ) [le]
上一个查询的输出:
现在我需要分别获取每个员工的主要功能和次要功能,所以我尝试了以下方法来获取主要功能:
SELECT [le].[EmployeeId], [le].[FunctionId], ROW_NUMBER() OVER(PARTITION BY [le].[EmployeeId] ORDER BY [le].[SortOrder] ASC) AS [RealOrder]
FROM (
SELECT [e].[EmployeeId], [es].[FunctionId], ISNULL([es].[SortOrder], 0) AS [SortOrder]
FROM [dbo].[Employee] [e]
INNER JOIN [dbo].[Employee_Scope] AS [es] ON [es].[EmployeeId] = [e].[EmployeeId]
WHERE es.SortOrder = (SELECT MIN(es1.SortOrder) FROM Employee_Scope es1)
) [le]
预期输出:
对于员工 ID = 5205
EmployeeId FunctionId(Main) CompanyId SortOrder
5205 1 20 1
EmployeeId FunctionId(Secondary) CompanyId SortOrder
5205 1 50 30
5205 54 154 60
【问题讨论】:
-
对于
SortOrder,他们的“main”函数的值是否总是0? -
sortOrder 并不总是 0。它可以从任何数字开始。
-
超过 1 个例子对我们真的有帮助,否则我们只能从我们所拥有的东西中推断出信息。像这样的细节真的应该在你的问题中。
-
我修改了例子。
-
所以您还需要在最终结果中将
SortOrder1的值替换为0吗?现在看起来你需要使用WHERE SortOrder = 1和WHERE SortOrder > 1。
标签: sql sql-server tsql