我正在尝试创建一个存储过程,该过程将返回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 = 5和CompanyID=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)