考虑下表结构
ADateTime AGroupName ARecordType AValue
========== ========== =========== ======
2013-01-01 Ninjas A 10
2013-01-01 Ninjas B 5
2013-01-01 Ninjas C 2
2013-01-01 Ninjas D 1
2013-01-01 Ninjas E 0
2013-01-01 Clowns A 8
2013-01-01 Clowns B 4
2013-01-01 Clowns E 1
2013-01-08 Ninjas A 7
2013-01-08 Ninjas B 3
2013-01-08 Ninjas E 1
2013-01-08 Clowns A 4
2013-01-08 Clowns B 3
我需要为 ADateTime 和 AGroupName 的每个组合计算 2 个值(CalcVal1 和 CalcVal2)。换句话说,我需要 GROUP BY ADateTime 和 AGroupName (这是最简单的部分)。
注意:正如您从示例数据中看到的那样,不能保证给定分组会存在某种记录类型......所以如果/在必要时进行外部连接和合并!
我想弄清楚的是如何根据 ARecordType 的值计算 CalcVal1 和 CalcVal2。以下是 CalcVal1 和 CalcVal2 的规格...
- CalcVal1 是(AValue 的总和,其中 ARecordType='A')
- CalcVal2 是(AValue 的总和,其中 ARecordType IN ('B','C'))减去(AValue 的总和,其中 ARecordType IN ('D','E'))
我期望的结果集是
ADateTime AGroupName CalcVal1 CalcVal2
========== ========== ======== ========
2013-01-01 Ninjas 10 6
2013-01-01 Clowns 8 3
2013-01-08 Ninjas 7 2
2013-01-08 Clowns 4 3
我在 SQL-Server 2005 上使用 T-SQL。欢迎使用 SQL 或存储过程。TIA,我太老了,现在是他们让我成为 CTO 的时候了!(;-D)