如何创建 Microsoft Access 查询,为那些未分类的交易提供默认交易类型?
how to create a Microsoft Access query that provides a default transaction type for those transactions not categorized?
我如何创建一个为那些未分类的交易提供默认交易类型的查询?
所以假设我有:
- 交易table(有交易)
- 类别table
- transactions_categories table - 允许分配多个类别(按百分比)
- 这样的用法是在整个数据中只应用了非个人类别。所以有很多交易没有应用类别
目标:
- 想要创建一个查询来创建所有分配金额的列表,因此将包括以下列:transaction.tDate、transaction.tTitle、categories.name、allocatedAmount(根据百分比计算 *交易金额)
但是:
- 我如何在查询中将涵盖所有未分配交易的条目添加到默认类别 "personal",其中分配的金额将是交易价值的 100%
- 而且(如果可能的话),对于已经分类但没有完整交易价值的交易(比如只有 50% 被分配给一个类别),如何解决这个问题。
例子
Transactions
1 XXXX 0
2 YYY 0
3 ZZZ 0
Categories
1 aaa
2 bbb
3 ccc
4 PersonalDefault
Transaction-Categories (i.e. allocation)
transID catID %
1 1 100%
2 2 50%
Query Output I'm After
transTitle catTitle AllocatedAmount
xxxx aaaaa 0
yyyyy bbbbbb
yyyyy PersonalDefault
zzzzz PersonalDefault 0
此查询将为您提供所需的结果:
select a.transID, t.name as transname, a.catID, c.name as catname, t.amount * a.pc / 100 as amnt
from allocation a inner join transactions t on a.transID = t.id
inner join categories c on a.catID = c.id
union all
select a.transID, t.name as transname, 4 as catID, 'PersonalDefault' as catname, t.amount * (100 - a.pc) / 100 as amnt
from allocation a inner join transactions t on a.transID = t.id
where a.pc < 100
union all
select t.id as transID, t.name as transname, 4 as catID, 'PersonalDefault' as catname, t.amount as amnt
from transactions t
where t.id not in (select transID from allocation)
检查这个 SQL Fiddle(它是 SQL 服务器,但也应该在 Access 中工作)
我如何创建一个为那些未分类的交易提供默认交易类型的查询?
所以假设我有:
- 交易table(有交易)
- 类别table
- transactions_categories table - 允许分配多个类别(按百分比)
- 这样的用法是在整个数据中只应用了非个人类别。所以有很多交易没有应用类别
目标:
- 想要创建一个查询来创建所有分配金额的列表,因此将包括以下列:transaction.tDate、transaction.tTitle、categories.name、allocatedAmount(根据百分比计算 *交易金额)
但是:
- 我如何在查询中将涵盖所有未分配交易的条目添加到默认类别 "personal",其中分配的金额将是交易价值的 100%
- 而且(如果可能的话),对于已经分类但没有完整交易价值的交易(比如只有 50% 被分配给一个类别),如何解决这个问题。
例子
Transactions
1 XXXX 0
2 YYY 0
3 ZZZ 0
Categories
1 aaa
2 bbb
3 ccc
4 PersonalDefault
Transaction-Categories (i.e. allocation)
transID catID %
1 1 100%
2 2 50%
Query Output I'm After
transTitle catTitle AllocatedAmount
xxxx aaaaa 0
yyyyy bbbbbb
yyyyy PersonalDefault
zzzzz PersonalDefault 0
此查询将为您提供所需的结果:
select a.transID, t.name as transname, a.catID, c.name as catname, t.amount * a.pc / 100 as amnt
from allocation a inner join transactions t on a.transID = t.id
inner join categories c on a.catID = c.id
union all
select a.transID, t.name as transname, 4 as catID, 'PersonalDefault' as catname, t.amount * (100 - a.pc) / 100 as amnt
from allocation a inner join transactions t on a.transID = t.id
where a.pc < 100
union all
select t.id as transID, t.name as transname, 4 as catID, 'PersonalDefault' as catname, t.amount as amnt
from transactions t
where t.id not in (select transID from allocation)
检查这个 SQL Fiddle(它是 SQL 服务器,但也应该在 Access 中工作)