0

このSQL フィドルは、私が抱えている問題を示しています。

背景として: ジョブ、エレメント、ロールアワー、レートがあります。ジョブは複数の要素で構成できます。要素は (通常) 1 つ以上の役割時間 (つまり、役割と時間数) で構成されます。各ロールには時給があり、日付によって、またジョブのクライアントによって異なります。

上記のクエリでは、ジョブの財務内訳を取得しようとしています。つまり、ジョブのすべての要素とその総コストのリストです。実際、現時点では、これらの要素も役割ごとに分類されていますが、最終的なクエリでは必ずしも必要ではありません。

「ロール コスト」列は、そのロールの小計に到達するために、時給に予算時間を正しく掛けていることがわかります。ただし、これらのフィールド (「要素の小計」列) を合計しようとすると、期待していた数ではありません。

問題は、最新のレートを取得するサブクエリにあると思われます。これは、別の SQL Fiddle hereとして参照用に設定しました。ロールに対して複数の可能なレートを返しています。これがメイン クエリに結合されると、行の合計が多すぎます。

したがって、私のメロンをひねっている問題は次のとおりです。特定のクライアントに「最適な」レートを一致させる必要があります。つまり、企業 IDクライアント ID の両方に一致するレートがあれば、それが必要です。しかし、存在しない場合は、会社 ID と一致するものが必要です。それらのいずれも存在しない場合は、ロールの「基本」レートが必要です。したがって、結合のすべての「OR __ IS NULL」です。

どうすればよいかわからないのは、SUM()部分を機能させるために必要な「1つのレコードを返すだけ」と組み合わせることです。

長文失礼いたしました。ここまでよろしければ、よろしくお願いします。

4

1 に答える 1