0
在這種情況下有四個表:表A,表B和表C,表D和TableE檢索多個摘要
TableA -> TableB = 1-to-many
TableB -> TableC = 1-to-many
TableB -> TableD = 1-to-1
TableC -> TableE = 1-to-1
TableA { Id (PK), Field1 (float), DateField (DateTime) }
TableB { Id (PK), TableAId (FK), TableDId (FK), Field2 (float) }
TableC { Id (PK), TableBId (FK), TableEId (FK), Field3 (float) }
TableD { Id (PK), Type (tinyint) }
TableE { Id (PK), Type (tinyint) }
一些,但不能從表B中的所有記錄包含表C兒童的記錄。基於一些日期範圍(從到),我需要的所有記錄從表A,它的相關記錄,並計算:TableA.Field1的
- 總結,TableB.Field2的
- 總之,通過分組TableD.Type(有5種不同的類型)。
- TableC.Field3的摘要,被TableE.Type(有4種不同的類型)所困擾。
所以,結果應該包含10個計算的摘要。什麼是最有效的方法來實現這一目標?
編輯:這裏是僞查詢,例如,對於每個彙總:
SELECT SUM(a.Field1) FROM TableA a INNER JOIN TableB b ON a.Id = b.TableAId WHERE a.DateField BETWEEN DateFrom AND DateTo
SELECT SUM(b.Field2) FROM TableA a INNER JOIN TableB b ON a.Id = TableD d ON b.TableDId=d.Id WHERE a.DateField BETWEEN DateFrom AND DateTo AND d.Type = 1
SELECT SUM(b.Field2) FROM TableA a INNER JOIN TableB b ON a.Id = TableD d ON b.TableDId=d.Id WHERE a.DateField BETWEEN DateFrom AND DateTo AND d.Type = 2 // etc to 5
SELECT SUM(c.Field3) FROM TableA a INNER JOIN TableB b ON a.Id = b.TableAId INNER JOIN TableC c ON b.Id=c.TableBId INNER JOIN TableE ON c.TableEId=e.Id WHERE a.DateField BETWEEN DateFrom AND DateTo AND e.Type = 1 // 3x this query, only type is different
SUM聚合或其他「摘要」?和任何分組? – gbn
SUM聚合,Field2和Field3需要分組,如前所述,兩個分組都是每個類型。 – Goran