如何创建一个Microsoft Access查询,为那些未分类的事务提供默认事务类型?

时间:2015-02-25 00:07:30

标签: sql ms-access ms-access-2013 ms-access-2000

如何创建一个为未分类的交易提供默认交易类型的查询?

假设我有:

  • 交易表(包含交易)
  • 分类表
  • transactions_categories表 - 允许分配多个类别(包含百分比)
  • 使用方式是仅通过数据应用非个人类别。因此,有很多交易没有应用类别

目的:

  • 想要创建一个创建所有已分配金额列表的查询,因此将包含为列:transaction.tDate,transaction.tTitle,categories.name,allocatedAmount(根据百分比*交易金额计算)

BUT:

  • 如何在查询中包含涵盖尚未分配的所有交易的条目到默认类别" personal",其中分配的金额将是交易的100%值
  • 并且(如果可能的话),对于已经分类但不是完整交易价值的交易(比如只有50%被分配给一个类别),如何将其覆盖到。

实施例

Transactions
1 XXXX   $100
2 YYY    $100
3 ZZZ    $100

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            $100
yyyyy        bbbbbb           $50
yyyyy        PersonalDefault  $50
zzzzz        PersonalDefault  $100

1 个答案:

答案 0 :(得分:1)

此查询将为您提供所需的结果:

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 Server,但也应该在Access中工作)