5353 UPDATE F_Transaction
5454 SET SubCategory = (
5555 SELECT Default_SubCategory FROM (
56- SELECT Default_SubCategory, D_Category_Rule .AccountName
56+ -- Specific Account, Exact Match (Highest Priority)
57+ SELECT Default_SubCategory, D_Category_Rule .AccountName , D_Category_Rule .Rule_Pattern , 0 AS Priority
58+ FROM D_Category_Rule
59+ WHERE
60+ LOWER (NEW .TransactionPayee ) = LOWER (D_Category_Rule .Match_Word )
61+ AND D_Category_Rule .Rule_Category = ' Payee'
62+ AND D_Category_Rule .Rule_Pattern = ' Exact'
63+ AND D_Category_Rule .AccountName = NEW .AccountName
64+ UNION ALL
65+ -- Specific Account, Contains Match
66+ SELECT Default_SubCategory, D_Category_Rule .AccountName , D_Category_Rule .Rule_Pattern , 1 AS Priority
5767 FROM D_Category_Rule
5868 WHERE
5969 (LOWER (NEW .TransactionPayee ) LIKE ' %' || LOWER (D_Category_Rule .Match_Word ) || ' %'
@@ -62,18 +72,27 @@ BEGIN
6272 AND D_Category_Rule .Rule_Pattern = ' Contains'
6373 AND D_Category_Rule .AccountName = NEW .AccountName
6474 UNION ALL
65- SELECT Default_SubCategory, D_Category_Rule .AccountName
75+ -- ALL Accounts, Exact Match
76+ SELECT Default_SubCategory, D_Category_Rule .AccountName , D_Category_Rule .Rule_Pattern , 2 AS Priority
77+ FROM D_Category_Rule
78+ WHERE
79+ LOWER (NEW .TransactionPayee ) = LOWER (D_Category_Rule .Match_Word )
80+ AND D_Category_Rule .Rule_Category = ' Payee'
81+ AND D_Category_Rule .Rule_Pattern = ' Exact'
82+ AND D_Category_Rule .AccountName = ' ALL'
83+ UNION ALL
84+ -- ALL Accounts, Contains Match (Lowest Priority)
85+ SELECT Default_SubCategory, D_Category_Rule .AccountName , D_Category_Rule .Rule_Pattern , 3 AS Priority
6686 FROM D_Category_Rule
6787 WHERE
6888 (LOWER (NEW .TransactionPayee ) LIKE ' %' || LOWER (D_Category_Rule .Match_Word ) || ' %'
6989 OR LOWER (D_Category_Rule .Match_Word ) LIKE ' %' || LOWER (NEW .TransactionPayee ) || ' %' )
7090 AND D_Category_Rule .Rule_Category = ' Payee'
7191 AND D_Category_Rule .Rule_Pattern = ' Contains'
7292 AND D_Category_Rule .AccountName = ' ALL'
73- )
93+ ) AS SubQueryWithPattern
7494 ORDER BY
75- CASE WHEN AccountName = NEW .AccountName THEN 0 ELSE 1 END,
76- CASE WHEN Rule_Pattern = ' Exact' THEN 0 ELSE 1 END
95+ SubQueryWithPattern .Priority ASC
7796 LIMIT 1
7897 )
7998 WHERE F_Transaction .TransactionID = NEW .TransactionID
0 commit comments