Подзапрос из другой таблицы в случае, когда условие - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь написать запрос, в котором я хочу суммировать столбец цены на основе условия, являющегося подзапросом.

мой запрос:

select
  fund.FundName, 
  SUM(Case when (
        Select Top 1 bitValue 
        from table 1 
        where table1.id = Company.id and table1.field = 25
        ) = 1 then price else 0 end) as 'TotalPrice'
from
Fund left outer join Company on Company.fundId=fund.id 
group by
fund.fundName

Он выдает ошибку: Невозможно выполнить агрегатную функцию для выражения, содержащего агрегат или подзапрос.

Каков наилучший альтернативный способ достижения этого.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

не проверено очевидно, без данных образца.

select fund.FundName
  ,SUM(Case when table1.id is not null then price else 0 end) as 'TotalPrice'
from Fund
left outer join Company on Company.fundId = fund.id
left outer join (
    select distinct id
    from table1
    where field = 25
        and bitvalue = 1
) table1 on table1.id = Company.id
group by fund.fundName
0 голосов
/ 24 апреля 2020

Надеюсь, что это работает для вашего случая:

ВЫБЕРИТЕ FUND.FUNDNAME, S.TotalPrice ОТ FUND LEFT OUTER СОЕДИНИТЕ КОМПАНИЮ НА КОМПАНИИ. PRICE) ELSE 0 END как TotalPrice, table1.ID из таблицы 1, где table1.id = Company.id и table1.field = 25 GROUP BY table1.ID) S ON S.ID = Company.id GROUP BY FUND.FUNDNAME

...