在 SSRS 中使用模糊查找



在 SSRS 中,假设我有两个表。例如,我有:

表1

AvgValueLow | AvgValueHigh | Rate
-----------------------------------
7           | NULL         | 3
4           | 6.99         | 2
2           | 3.99         | 1
NULL        | 1.99         | 0

然后,我有一个表,其中包含:

表2

LastName    | FirstName    | Value
-----------------------------------
Johnson     | Mike         | 4.5
Wright      | Dennis       | 3.3
Morgan      | Ferris       | 1.7

现在,这些表之间没有通用字段,因为它们存在于 SSRS 中完全独立的数据表中。此外,我需要能够从 Table2 中获取 VALUE 字段,并查找它在 Table1 中介于哪个"范围"之间(例如,在 Table2 中,值为 4.5 的 Mike Johnson 将在 Table1 上介于 4 和 6.99 之间,因此该函数应返回 Rate 2)。

如果没有更简单的方法可以做到这一点,我可以将 Table1 中的值硬编码到一个将返回正确值的函数中,但我希望能够保留更改 Table1 中的范围/值的选项,而不必更改指向它的代码。

请问有什么建议或建议吗?

您可以使用简单的JOIN

SELECT t2.*, t1.Rate
FROM TABLE2 t2
JOIN TABLE1 t1
  ON t2.[Value] >= COALESCE(AvgValueLow, 0) 
 AND t2.[Value] <= COALESCE(AvgValueHigh,10000000)  -- set max possible value

LiveDemo

输出:

╔═══════════╦══════════╦═══════╦══════╗
║ FirstName ║ LastName ║ Value ║ Rate ║
╠═══════════╬══════════╬═══════╬══════╣
║ Mike      ║ Johnson  ║ 4,50  ║    2 ║
║ Dennis    ║ Wright   ║ 3,30  ║    1 ║
║ Ferris    ║ Morgan   ║ 1,70  ║    0 ║
╚═══════════╩══════════╩═══════╩══════╝

编辑:

您的范围将跳过从 1.992.00的值,如 1.995 。如果是这种情况,您可以仅使用第一个值进行搜索:

WITH cte AS 
(
  SELECT t2.FirstName, t2.LastName, t2.[Value],  MAX(AvgValueLow) AS AvgValueLow
  FROM TABLE2 t2
  JOIN TABLE1 t1
    ON t2.[Value] >= COALESCE(t1.AvgValueLow,0)
  GROUP BY t2.FirstName, t2.LastName, t2.[Value]
)
SELECT c.FirstName, c.LastName, c.[Value], t1.Rate
FROM cte c
JOIN TABLE1 t1
  ON c.AvgValueLow = t1.AvgValueLow
  OR (c.AvgValueLow IS NULL AND t1.AvgValueLow IS NULL)

LiveDemo2

警告:我假设范围没有间隙

最新更新