返回具有最匹配参数的行

FiN*_*FiN 2 sql-server

我正在尝试创建一个存储过程,该过程将返回RowID最匹配的参数。假设我们有一张桌子:

+-------+------------+------------+-----------+
| RowID | DocumentID | EmployeeID | CompanyID |
+-------+------------+------------+-----------+
|     1 |         36 | 1          | 4         |
|     2 |         36 | null       | 2         |
|     3 |         36 | 4          | null      |
+-------+------------+------------+-----------+
Run Code Online (Sandbox Code Playgroud)

我发送假设 values DocumentID = 36, EmployeeID = 5, ComanyID = 2,它应该返回我的第二行DocumentID并且CompanyID存在。

其他一些情况是,如果我发送DocumentID = 36,EmployeeID = 5CompanyID=10,它应该首先在表中返回我。

如果关于这个问题的信息太少,或者不清楚,请随时询问更多细节。

Aar*_*and 13

;WITH c AS
(
  SELECT RowID, 
    c = CASE WHEN DocumentID = @DocumentID THEN 1 ELSE 0 END
      + CASE WHEN EmployeeID = @EmployeeID THEN 1 ELSE 0 END
      + CASE WHEN CompanyID  = @CompanyID  THEN 1 ELSE 0 END
  FROM dbo.TableName
)
SELECT TOP (1) RowID FROM c ORDER BY c DESC;
Run Code Online (Sandbox Code Playgroud)

  • 此外,更改 CASE 语句中的替换值(而不是 1)将允许根据字段的不同权重进行排序。 (2认同)