2014-11-13 4 views
0

Я пытаюсь создать запрос, который суммирует сумму продаж от 52 недель данных от сущностей в этой таблице.Подводящий подзапрос

enter image description here

Я понял, как получить последние 52 недели для CYSales используя следующий запрос. Год и неделя в конечном итоге будут параметрами в результирующем отчете, поэтому эти значения будут произвольными. Я использовал текущий год и неделю 40 только для этого примера.

SELECT [Group],[Owner],[SalesPersonNumber],SUM([tot_sls_amt]) AS CYSales 
    FROM TableA 
    WHERE ((Year = year(getdate()) AND Week <= 40) OR (Year = year(getdate()) - 1 AND Week > 40)) AND cmp_status = 'A' 
    Group BY [Group] 
     ,[Owner] 
     ,[SalesPersonNumber] 

Это дает мне это

enter image description here

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

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 

Как исправить следующий запрос, чтобы дать мне PYSales?

SELECT [Group] 
     ,[Owner] 
     ,[SalesPersonNumber] 
     ,SUM([tot_sls_amt]) AS CYSales 
     ,(SELECT SUM([tot_sls_amt]) 
      FROM TableA 
      WHERE ((Year = year(getdate())-1 AND Week <= 40) OR (Year = year(getdate()) - 2 AND Week > 40)) AND cmp_status = 'A' 
      Group BY [Group] ,[Owner],[SalesPersonNumber]) AS PYSales 
    FROM TableA 
    WHERE ((Year = year(getdate()) AND Week <= 40) OR (Year = year(getdate()) - 1 AND Week > 40)) AND cmp_status = 'A' 
    Group BY [Group] 
      ,[Owner] 
      ,[SalesPersonNumber] 

ответ

1

Я хотел бы переместить к югу запрос и присоединиться к ней или использовать КТР.

я использовал левый присоединиться упаковывают вас есть кто-то новое, что не будут иметь данные в ру

не имели данных, чтобы проверить, дайте мне знать, если что-то не удается, и я могу пересмотреть.

SELECT 

a.[Group] 
,a.[Owner] 
,a.[SalesPersonNumber] 
,SUM(a.[tot_sls_amt]) AS CYSales 
,(b.[tot_sls_amt]) AS PYSales 

    FROM 

TableA a 
     Left Join 
      (SELECT sum([tot_sls_amt]) tot_sls_amt,[Group],[Owner] ,[SalesPersonNumber] 
       FROM TableA 
        WHERE ((Year = year(getdate())-1 AND Week <= 40) OR (Year = year(getdate()) - 2 AND Week > 40)) AND cmp_status = 'A' 
         group by [Group],[Owner] ,[SalesPersonNumber]) b on a.group = b.group and a.owner = b.owner and a.salespersonumber =b.salespersonnumber 



WHERE 
((Year = year(getdate()) AND Week <= 40) OR (Year = year(getdate()) - 1 AND Week > 40)) AND cmp_status = 'A' 


Group BY 
a.[Group] 
,a.[Owner] 
,a.[SalesPersonNumber] 
,(b.[tot_sls_amt]) 
+0

Я получаю: Msg 8155, уровень 16, состояние 2, строка 16 Для столбца 1 раздела 'b' не указано имя столбца. Msg 207, уровень 16, состояние 1, строка 28 Недопустимое имя столбца 'tot_sls_amt'. Msg 207, уровень 16, состояние 1, строка 7 Недопустимое имя столбца 'tot_sls_amt'. – d90

+0

@NicholasJDininno fixed - забыли указать столбец в подзапросе соединения – lookslikeanevo

0

вы делаете GROUP BY в подзапрос, который будет возвращать сумму для каждой пары группы, владелец, SalesPersonNumber, который так же, как ваш внешний запрос.

в случае, если вам просто нужно Total accross на все значения для данной недели и года, как раз сделать сумму и использовать кросс применять

SELECT [Group] 
     ,[Owner] 
     ,[SalesPersonNumber] 
     ,SUM([tot_sls_amt]) AS CYSales, 
     T.total AS PYSales 
    FROM TableA 
    WHERE ((Year = year(getdate()) AND Week <= 40) OR (Year = year(getdate()) - 1 AND Week > 40)) AND cmp_status = 'A' 
    Group BY [Group] 
      ,[Owner] 
      ,[SalesPersonNumber] 
    CROSS APPLY (
      SELECT SUM([tot_sls_amt]) as total 
      FROM TableA 
      WHERE ((Year = year(getdate())-1 AND Week <= 40) OR (Year = year(getdate()) - 2 AND Week > 40)) AND cmp_status = 'A' 
     ) As T 
+0

Если я возьму группу, я получу ту же сумму для всех PYSales. Мне нужно, чтобы он был сгруппирован группой, владельцем и продавцом. Используя ваш ответ, я получаю: Неправильный синтаксис рядом с ключевым словом «CROSS». Неверный синтаксис рядом с ключевым словом 'As'. – d90

Смежные вопросы