Сумма из подзапроса (MSSQL 2000)

accessx
Дата: 08.09.2006 10:54:36
Всем доброго
Такая проблемка:
есть таблица лицевых(@acc), и несколько таблиц, связанных с ней по лицевому.
Запрос
SELECT D.Quantity, D.Debet, C.Quantity, C.Credit
  FROM @acc A
  LEFT JOIN  Debets D
         ON A.acc = D.Account and D.ClosingYear = 2006
  LEFT JOIN  Credits C
         ON A.acc = C.Account and C.ClosingYear = 2006
выдает такой результат
Quantity Debet Quantity Credit
31.0000 21.7000 .0000 .0000
т.е. в обеих таблицах для данного лицевого - по одной записе, и когда я делаю
SELECT SUM((D.Quantity), SUM(D.Debet), SUM(C.Quantity), SUM(C.Credit)
  FROM @acc A
  LEFT JOIN  Debets D
         ON A.acc = D.Account and D.ClosingYear = 2006
  LEFT JOIN  Credits C
         ON A.acc = C.Account and C.ClosingYear = 2006
получаю
31.0000 21.7000 .0000 .0000
что меня и устраивает.
Но если в одной из таблиц (пусть - Credits) для этого лицевого несколько записей(пусть - две), то получаю по первому запросу
Quantity Debet Quantity Credit
31.0000 21.7000 .0000 .0000
31.0000 21.7000 23.0000 14.5000
и тогда второй запрос мне даёт неверную сумму данных из Debets:
62.0000 43.4000 23.0000 14.5000
Как с меньшей потери крови выкрутиться из ситуации? Хотелось бы, как идеальный вариант, чтобы первый запрос в таких случаях возвращал
Quantity Debet Quantity Credit
31.0000 21.7000 .0000 .0000
NULL NULL 23.0000 14.5000
Тогда просуммировать проблемы бы не составило. Если такое можно сделать, подскажите
Taffy
Дата: 08.09.2006 11:06:26
SELECT SUM((D.Quantity), SUM(D.Debet), SUM(C.Quantity), SUM(C.Credit)
  FROM @acc A
  LEFT JOIN  
    (select SUM(Debet) as Debet, Account 
      from Debets
      where ClosingYear = 2006
      group by  Account ) D
              ON A.acc = D.Account and D.ClosingYear = 2006
  LEFT JOIN 
    (select SUM(Quantity) as Quantity, SUM(Credit) as Credit, Account 
      from Credits
      where ClosingYear = 2006
      group by  Account )  C
               ON A.acc = C.Account
accessx
Дата: 08.09.2006 12:43:15
Ых, вот подозревал, что таки придется сумму вытягивать из под подзапроса(
Спасибо за вариант. У кого-то есть ещё предложения? Так настырно спрашиваю, потому что всё это завёрнуто у меня в мегахранимку, которая будет мега тормозить, если я её так переделаю
ё
Дата: 08.09.2006 12:55:50
для етого над другую структуру ... основная мысль - хранить суммы посчитанные
за подробностями и размышлениями в соседний форум - проектирование бд
accessx
Дата: 08.09.2006 14:26:24
2ё:
хранить суммы ничего не даст, потому что в таблице несколько строк не от того, что там много записей по лицевому одного смысла, а потому, что там много записей по лицевому, относящихся к разным категориям. Запрос в таком виде привёл, чтобы упростить. Вообще он выглядит примерно так:
...
  LEFT JOIN Credits C
    ON A.acc = C.Account and C.ClosingYear = 2006 and C.SaldoType = 'CALC'
...
где SaldoType может быть разным, т.е. может быть и так
...
  LEFT JOIN Credits C
    ON A.acc = C.Account and C.ClosingYear = 2006 and 
    (C.SaldoType = 'CALC' or C.SaldoType = 'PAY')
...
Что хранить в виде суммы? Тут даже вьюху не вижу как применить...