【发布时间】:2012-03-15 11:50:10
【问题描述】:
SQL 2008
基本上我有一个如下所示的数据集:
AcctID AcctType AcctSubType Curr TransType Amount Sequence
1 CCY SET EUR Opening 1000 B
1 CCY SET EUR BUY -100 T
1 CCY SET EUR SEL 100 T
1 CCY SET EUR Closing 1000 B
2 CCY SET EUR Opening 2000 B
2 CCY SET EUR SEL 100 T
2 CCY SET EUR Closing 2100 B
3 CCY INC EUR Opening 1000 B
3 CCY INC EUR SEL 200 T
3 CCY INC EUR BUY -100 T
3 CCY INC EUR Closing 1100 B
4 CCY SET GBP Opening 2000 B
4 CCY SET GBP SEL 100 T
4 CCY SET GBP Closing 2100 B
我想要做的是从数据集中返回所有数据,其中每种货币有多个资本账户(所以基本上不止一个不同的 AcctID)。资本账户由 AcctType = 'CCY' 和 AcctSubType = 'SET' 标识。我也只想要余额,所以其中 Sequence = 'B'。
所以对于上述数据集,将返回以下内容:
AcctID AcctType AcctSubType Curr TransType Amount Sequence
1 CCY SET EUR Opening 1000 B
1 CCY SET EUR Closing 1000 B
2 CCY SET EUR Opening 2000 B
2 CCY SET EUR Closing 2100 B
我是这样开始的,但对如何在大于 1 的货币中包含不同的 AcctID 计数感到困惑:
;;with test (AcctID, AcctType, AcctSubType, Curr, TransType, Amount, Sequence)
as
(
select 1, 'CCY', 'SET', 'EUR', 'Opening', 1000, 'B'
union all select 1, 'CCY', 'SET', 'EUR', 'BUY', -100, 'T'
union all select 1, 'CCY', 'SET', 'EUR', 'SEL', 100, 'T'
union all select 1, 'CCY', 'SET', 'EUR', 'Closing', 1000, 'B'
union all select 2, 'CCY', 'SET', 'EUR', 'Opening', 2000, 'B'
union all select 2, 'CCY', 'SET', 'EUR', 'SEL', 100, 'T'
union all select 2, 'CCY', 'SET', 'EUR', 'Closing', 2100, 'B'
union all select 3, 'CCY', 'INC', 'EUR', 'Opening', 1000, 'B'
union all select 3, 'CCY', 'INC', 'EUR', 'SEL', 200, 'T'
union all select 3, 'CCY', 'INC', 'EUR', 'BUY', -100, 'T'
union all select 3, 'CCY', 'INC', 'EUR', 'Closing', 1100, 'B'
union all select 4, 'CCY', 'SET', 'GBP', 'Opening', 2000, 'B'
union all select 4, 'CCY', 'SET', 'GBP', 'SEL', 100, 'T'
union all select 4, 'CCY', 'SET', 'GBP', 'Closing', 2100, 'B'
)
select *
from test t
where t.AcctType = 'CCY'
and t.AcctSubType = 'SET'
and t.Sequence = 'B'
and t.Curr in (select w.Curr
from test w
where w.AcctType = 'CCY'
and w.AcctSubType = 'SET'
and w.Sequence = 'B'
group by w.Curr
having COUNT(distinct w.AcctID) > 1)
现在这适用于数据集,但我担心的是,如果有不止一种货币和不止一个资本账户,这是否可行?我创建的代码是否适用于我想要实现的目标。
非常感谢
【问题讨论】: