СУММА () расчетного поля - PullRequest
       40

СУММА () расчетного поля

2 голосов
/ 20 января 2012

У меня есть этот запрос:

select 
C.One
,C.Two
,C.Three
,C.Four

from mytable C

where C.One = 11052 and C.Three = 97734

Это возвращает:

One  |Two | Three  | Four
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   2   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   1   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   3   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   4   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4
11052   5   97734   4

Извините за длинную вставку, так как вы можете видеть каждую строку, повторенную 10 раз для каждой "второй колонки"значение (10x для 1, 2, 3, 4, 5) всего строк 50.

2)

Если записано это:

select 
C.One
,C.Two
,C.Three
,C.Four
,sum(c.Four) as 'Sum'

from mytable C

where C.One = 11052 and C.Three = 97734
group by C.One, C.Two,C.Three , C.Four

, что приводит к:

One  | Two | Three  | Four  |  Sum
11052   1       97734   4   40
11052   2       97734   4   40
11052   3       97734   4   40
11052   4       97734   4   40
11052   5       97734   4   40

Сумма должна быть 20 (4 + 4 + 4 + 4 + 4), но это 40 ', потому что 10x повторение 4 в предыдущем запросе.(выше).

Я должен в итоге получить

One  | Two | Three  | Four  |  Sum
11052   1       97734   4   20
11052   2       97734   4   20
11052   3       97734   4   20
11052   4       97734   4   20
11052   5       97734   4   20

Что я должен сделать, чтобы исправить это и получить 20, а не 40?Надеюсь, это понятно.Спасибо за ваше время.

Ответы [ 3 ]

1 голос
/ 20 января 2012

Вы можете сделать это с помощью подзапроса:

select a.One,a.Two,a.Three,a.Four,sum(a.Four) as 'Sum'
from (select C.One,C.Two,C.Three,C.Four
  from mytable C
  where C.One = 11052 and C.Three = 97734
  group by C.One, C.Two,C.Three , C.Four) a
0 голосов
/ 20 января 2012

Я предполагаю, что вы используете SQL Server 2008 и выше, если нет, пожалуйста, прокомментируйте.
Вы пытаетесь получить 5 уникальных строк из myTable; мы называем это tempResult.
Затем для всех уникальных строк вы хотите добавить столбец.
Этот столбец является суммой столбца Four из tempResult.
Он будет иметь одинаковое значение для каждой строки.

select
  One, 
  Two, 
  Three, 
  Four, 
  sum(Four) over (order by One,Two,Three,Four asc) as SumAll
from
(
  select distinct
    C.One,
    C.Two,
    C.Three,
    C.Four,
  from mytable C  
  where 
    C.One = 11052 and 
    C.Three = 97734 
) g
0 голосов
/ 20 января 2012

попробуйте это:

 select 
      DISTINCT C.Two
      ,C.One
      ,C.Three
      ,C.Four
      ,sum(c.Four) as 'Sum'

 from mytable C
 where C.One = 11052 and C.Three = 97734
 group by  C.Two,C.One,C.Three,C.Four
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...