1

无论我们是否在特定地点提供服务,我都想退货。层次结构是邮政编码 > 州 > CountryWide

因此,如果您输入 TX 邮政编码,它将首先查看是否有邮政编码条目。如果没有,它将检查 TX 条目。如果仍然没有命中,它将检查全国政策。

为了实现这一点,我有一个 Calc 字段来指示具体程度。邮政编码为 3 级,州 = 2,CW = 1。所以一个简单的 MAX 会让我知道我正在处理什么级别的数据。我对此查询的一个示例是:

SELECT Service_Availability.Service_Product, MAX(Service_Availability.Specificity) AS Spec
FROM Service_Availability
WHERE Service_Availability.State = "TX" OR Service_Availability.State = "CW"
GROUP BY Service_Product;

现在这是我的问题所在。

我想知道是否可以提供最高级别的服务。但是,我没有正确的方法...

SELECT Service_Availability.Service_Product, MAX(Service_Availability.Specificity) AS Spec
FROM Service_Availability
WHERE (Service_Availability.State = "TX" OR Service_Availability.State = "CW") 
AND Service_Availability.Available = TRUE
GROUP BY Service_Product;

这将返回服务可用的最高级别的特异性,而不是如果该服务在最高级别的特异性下可用。

换句话说,假设邮编是 68123(奥马哈,内布拉斯加州)。

我的数据库显示我们确实在内布拉斯加州提供服务,但无论出于何种原因,我们特别不能在奥马哈(68123)提供服务。我希望数据库看到我有 zip 级别的数据,并使用它来确定可用性(FALSE)。

我理解为什么我的代码是错误的方法,但我不确定从哪个方向来。帮助表示赞赏!

4

1 回答 1

1

您需要将初始查询(几乎)作为子查询进行 INNER JOIN 才能使其正常工作:

SELECT Service_Availability.Service_Product, Service_Availability.Specificity 
FROM Service_Availability 
INNER JOIN (
    SELECT Service_Availability.Service_Product, MAX(Service_Availability.Specificity) AS Spec
    FROM Service_Availability
    WHERE (Service_Availability.State = "TX" OR Service_Availability.State = "CW")
    GROUP BY Service_Availability.Service_Product ) max_spec
  ON Service_Availability.Service_Product = max_spec.Service_Product
  AND Service_Availability.Specificity = max_spec.Spec
WHERE Service_Availability.Available = TRUE
于 2013-01-02T15:58:48.857 回答