0

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

所以假设我有:

  • 交易表(带交易)
  • 类别表
  • transactions_categories 表 - 允许分配多个类别(百分比)
  • 使用情况是,只有非个人类别已通过数据应用。所以有很多没有应用类别的交易

目标:

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

但:

  • 我如何在查询中将涵盖所有尚未分配的交易的条目包含到默认类别“个人”中,其中分配的金额将是交易价值的 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
4

1 回答 1

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 中工作)

于 2015-02-25T05:11:08.467 回答