これが裏話です。
特定の人の正しいコミッション値を含むトランザクションのリストを生成しようとしています。すべての人がコミッションの対象となるわけではありませんが、コミッション テーブルにエントリがあり、どの請求書アイテム、アイテム サブクラス、アイテム クラス、および/またはデフォルトのコミッション値を獲得するかを指定します。
私の問題は、以下に示すように、選択を非常に困難にするコミッションテーブルの作成方法にあります。
コミッション表
staffid sequence invoiceitemid subclassid invclassid commission commtype
------- -------- ------------- ---------- ---------- ---------- --------
KH 1 (null) (null) (null) 20.0 1
KH 2 (null) (null) BOA 0.0 2
KH 3 (null) (null) GRO 0.0 2
KH 4 (null) (null) HEA 5.0 2
KH 5 (null) (null) FTP 5.0 2
KH 6 (null) (null) NTR 0.0 2
KH 7 (null) EUK NTR 5.0 2
KH 8 (null) FOP NTR 5.0 2
KH 9 (null) PUR NTR 5.0 2
KH 10 (null) RC NTR 5.0 2
KH 11 (null) (null) MSC 0.0 2
KH 12 (null) (null) MIS 0.0 2
KH 13 1171 (null) (null) 15.8 2
KH 14 1173 (null) (null) 15.2 2
ここでも、COMMISSION テーブルの最も具体的な列から最も具体的でない列に基づいて、トランザクションごとに 1 つのコミッション値のみを選択する必要があります。
最も具体的-invoiceitemid、subclassid、invclassid -最も具体的でない
例 1:
トランザクションに以下が含まれている場合:
- 請求書アイテムミッド: 1234
- サブクラス ID: FOP
- invclass: NTR
SQL はサブクラス ID (「FOP」) で一致し、invclass (「NTR」) では一致しないため、手数料は 0.0 ではなく 5.0 になります。
例 2: トランザクションに一致が含まれていない場合:
- 請求書アイテムミッド: 1234
- サブクラス ID: STR
- invclass: BLA
SQL は、invoiceitemid (null)、subclassid (null)、および invclass (null) で一致する必要があり、その結果、手数料は 20.0 になります。
私が試したこと COALESCE(invoiceitemid, subclassid, invclassid) を使用して、そのレコードで最も具体的な項目を含む列を作成します。
ただし、最初の例では、表の FOP の前に NTR が発生するため、最初に誤って一致します。(下記参照)
SELECT COALESCE(invoiceitemid, subclassid, invclassid) AS COMBINE, *
FROM stcomm
WHERE staffid = 'KH'
ORDER BY sequence DESC
COMBINE staffid sequence invoiceitemid subclassid invclassid commission commtype
------- ------- -------- ------------- ---------- ---------- ---------- --------
URN KH 28 (null) URN MSC 0.0 2
6326 KH 27 6326 (null) (null) 0.0 2
6325 KH 26 6325 (null) (null) 0.0 2
6324 KH 25 6324 (null) (null) 0.0 2
6328 KH 24 6328 (null) (null) 0.0 2
5671 KH 23 5671 (null) (null) 20.0 2
5793 KH 22 5793 (null) (null) 20.0 2
4263 KH 21 4263 (null) (null) 0.0 2
5081 KH 20 5081 (null) (null) 20.0 2
3759 KH 19 3759 (null) (null) 0.0 2
4846 KH 18 4846 (null) (null) 0.0 2
SUH KH 17 (null) SUH SUP 5.0 2
SUD KH 16 (null) SUD SUP 5.0 2
SUP KH 15 (null) (null) SUP 0.0 2
1173 KH 14 1173 (null) (null) 15.2 2
1171 KH 13 1171 (null) (null) 15.8 2
この問題を解決するために、最も具体的な「FOP」が最初に選択されるように、シーケンス フィールドを降順で並べました。これは機能します。
COMMISSION テーブルをクエリして、トランザクションの正しい手数料を表示するにはどうすればよいですか?
私のトランザクションのSQLは次のとおりです。
SELECT T.staffid, T.invoiceid, T.invoiceitemid, I.subclassid, I.classid, T.quantity, T.invoiceprice
FROM TRANSACT T, INVOITEM I
WHERE T.invoiceitemid = I.invoiceitemid
AND T.staffid = 'KH'
staffid invoiceid invoiceitemid subclassid classid quantity invoiceprice
------- --------- ------------- ---------- ------- -------- ------------
KH 2555.0 04000 FOP NTR 2.00 3.40
KH 3575.0 04000 FOP NTR 7.00 11.90
KH 3981.0 04000 FOP NTR 6.00 10.20
KH 4333.0 04000 FOP NTR 1.00 1.79
KH 6401.0 04000 FOP NTR 5.00 8.95
KH 7863.0 04000 FOP NTR 12.00 21.48
選択する主キーがない、このような奇妙なデザインのテーブルに遭遇したことはありません。
皆さんが提供できる支援について、私は非常に感謝しています!