SQL ячейка равна сумме диапазона ячеек (тот же столбец) при выполнении условия - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь применить сумму Buy_Ann, когда это тот же номер счета. Это выглядит довольно просто, но я еще не смог ...

Date    Account     TX_Ann      COF_Ann     Buy_Ann
Jan     01006243    0.02392433  0.02293156  0.00099277
Feb     01006243    0.02392433  0.02392433  0.00000000
Mar     01006243    0.02392433  0.02392433  0.00000000
Feb     01006491    0.02301613  0.01818841  0.00482772
Mar     01006491    0.02301613  0.02301613  0.00000000

Мой код:

SELECT 
       [Date]
      ,[Account]
      ,[TX_ann]
      ,[CDF_ann]    
      ,(TX_ann-CDF_ann) as Buy_ann 

 FROM [Table1]
 Order by Account

Результат, который я хотел бы получить: (колонка Buy_ann)

 Date   Account     TX_Ann      COF_Ann     Buy_Ann
 Jan    01006243    0.02392433  0.02293156  0.00099277
 Feb    01006243    0.02392433  0.02392433  0.00099277
 Mar    01006243    0.02392433  0.02392433  0.00099277
 Feb    01006491    0.02301613  0.01818841  0.00482772
 Mar    01006491    0.02301613  0.02301613  0.00482772

Я попробовал следующий код:

SELECT TOP 1000 
       [Date]
      ,[Account]
      ,[TX_ann]
      ,[CDF_ann]    
      ,(Select TOP 1000 Sum(TX_ann-CDF_ann) 
       FROM Table1 Group by Account)) as Buy_ann 
 FROM [Table1]
 Order by Account

Это сообщение об ошибке, которое я получаю: Подзапрос возвратил более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Я понимаю, что не так, но на самом деле не знаю как это исправить.

Чтобы дать немного больше подробностей, указанный номер счета c будет иметь только одну строку со значением, отличным от нуля, в столбце Buy_ann (полученном в результате однократной корректировки ставки для столбца COF_ann). Проблема в том, что я никогда не знаю, какая это строка, не глядя на данные (и именно поэтому я пытаюсь дать значение суммы всем строкам с одинаковым номером счета). Я предполагаю, что могли бы быть другие способы сделать это, которые, вероятно, более эффективны.

Заранее спасибо, Одри Бодуан

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Пожалуйста, попробуйте запрос:

SELECT [Date]
      ,[Account]
      ,SUM(TX_ann) as TX_ann
      ,SUM(CDF_ann) as CDF_ann
      ,(SUM(TX_ann)-SUM(CDF_ann)) as Buy_ann 
 FROM [Table1]
 GROUP BY Date, Account
 Order by Date, Account
0 голосов
/ 17 марта 2020

Почти там! Переместите оператор GROUP BY.
Вы хотите сгруппировать по Account и оперировать столбцом Buy_Ann.

SELECT 
    [Account], 
    SUM((TX_ann-CDF_ann)) AS Buy_Ann 
FROM [Table1] 
GROUP BY [Account]

Использование SUM для агрегирования столбца, сгруппированного по Account, даст вам результат.

Затем вы можете редактировать с помощью do ORDER BY или * 1013. * et c et c.

--------- РЕДАКТИРОВАТЬ ------------

В этом случае ваш ответ все еще близко. Поскольку столбец суммирования возвращает все результаты (как в моем решении выше), вам придется отфильтровать их, чтобы они равнялись вашей внешней строке Account.

SELECT 
    [Account], 
    [egCol1],
    [egCol2],
    (
        SELECT SUM((TX_ann-CDF_ann)) 
        FROM [Table1] as t1
        GROUP BY [Account]
        HAVING t1.Account = t2.Account
    ) AS Buy_Ann 
FROM [Table1] as t2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...