В этом сценарии есть четыре таблицы: TableA, TableB и TableC, внесенные и 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) }
Некоторые, но не все записи из TableB содержат ребенок записей в TableC. Основываясь на некоторых DateRange (от-до), мне нужно взять все записи из TableA, и связанных с ней записей и Calculate:
- резюме TableA.Field1,
- резюме TableB.Field2, сгруппированных по TableD.Type (существует 5 различных типов).
- сводка TableC.Field3, объединенная с TableE.Type (существует 4 разных типа).
Таким образом, результат должен содержать 10 вычисленных сводок. Каким будет самый эффективный способ достичь этого?
Edit: вот псевдо запросы, как, например, для каждого резюме:
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 aggregate или некоторые другие «резюме»? И любая группировка? – gbn
Сгруппировка SUM, группировка требуется на Field2 и Field3, как уже упоминалось, обе группы относятся к каждому типу. – Goran