1

特定の場所でサービスを提供しているかどうかにかかわらず、返品したいと思います。階層は郵便番号>州>国全体です

したがって、TX zipコードを入力すると、最初にzipエントリがあるかどうかが確認されます。そうでない場合は、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;

これは、サービスが最高レベルの特異性で利用可能である場合ではなく、サービスが利用可能である場合に最高レベルの特異性を返します。

別の言い方をすれば、zipが68123(オマハ、ネブラスカ)であると仮定します。

私のデータベースは、私たちがネブラスカでサービスを提供していることを示していますが、何らかの理由で、オマハ(68123)では特にサービスを提供できません。データベースにzipレベルのデータがあることを確認し、それを使用して可用性(FALSE)を判別する必要があります。

私のコードが間違ったアプローチである理由は理解していますが、どちらの方向から来るのかわかりません。ヘルプをいただければ幸いです。

4

1 に答える 1

1

これを機能させるには、最初のクエリを(ほぼ)サブクエリとして内部結合する必要があります。

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 に答える