2017-02-02 4 views
0

Привет всем. Я сталкиваюсь с проблемой суммирования суммарного saleytd для моего заявления о случаях. Я попытался поставить функцию sum перед SalesYTD, и ошибка, которую я получаю, - это синтаксовые ошибки рядом с продажами. Я также пробовал группировать salesytd, и это не работает, потому что это дает мне эту ошибку. Столбец «PERSON.STATEPROVINCE.StateProvinceID» недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. Вот мой запрос ниже. Мой запрос работает отлично, я просто заставляю его суммировать мои итоги.ПОДВЕДЕНИЕ БАЛАНСА КАЖДОГО РЫНКА

USE AdventureWorks2014; 

GO 

SELECT STATEPROVINCEID,A.NAME,A.COUNTRYREGIONCODE,(b.SALESYTD), 

CASE 

WHEN A.TerritoryID = '1' THEN 'WESTERN MARKET' 

WHEN A.TerritoryID = '2' THEN 'NORTH EASTERN MARKET' 

WHEN A.TerritoryID = '3' THEN 'MID WESTERN MARKET' 

WHEN A.TerritoryID = '4' THEN 'SOUTH WESTERN MARKET' 

WHEN A.TerritoryID = '5' THEN 'SOUTH EASTERN MARKET' 
ELSE 'OTHER' 

END AS MARKET 


FROM PERSON.STATEPROVINCE as A INNER JOIN SALES.SalesTerritory AS B 

ON A.TerritoryID = B.TerritoryID 

WHERE A.CountryRegionCode = 'US' 

ответ

0

Если вы просто хотите, общий объем продаж в год на сегодняшний день на Южном западном рынке, то вы можете сделать условную агрегацию по SALESYTD колонке для этого рынка:

SELECT SUM(CASE WHEN A.TerritoryID = '4' THEN b.SALESYTD ELSE 0 END) AS total_sales 
FROM PERSON.STATEPROVINCE a 
INNER JOIN SALES.SalesTerritory b 
    ON a.TerritoryID = b.TerritoryID 
WHERE a.CountryRegionCode = 'US' 

Если вы хотите суммы для все территории, то вы можете использовать GROUP BY:

SELECT a.TerritoryID, SUM(b.SALESYTD) AS total_sales 
FROM PERSON.STATEPROVINCE a 
INNER JOIN SALES.SalesTerritory b 
    ON a.TerritoryID = b.TerritoryID 
WHERE a.CountryRegionCode = 'US' 
GROUP BY a.TerritoryID 
+0

Как насчет всех продаж со всех рынков и столбцов для рынков? как юго-запад = 700 миллионов долларов –

0

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

SELECT SUM(b.SALESYTD) AS TOTALSALES, 

case 

when a.TerritoryID = '1' then 'WESTERN MARKET' 

WHEN A.TERRITORYID = '2' THEN 'NORTH EASTERN MARKET' 

when a.TerritoryID = '3' then 'MID WESTERN MARKET' 

WHEN A.TerritoryID = '4' THEN 'SOUTH WESTERN MARKET' 

WHEN A.TERRITORYID = '5' THEN 'SOUTH EASTERN MARKET' 

else 'OTHER' 

end as MARKETS 

FROM PERSON.STATEPROVINCE a 

INNER JOIN SALES.SalesTerritory b 

ON a.TerritoryID = b.TerritoryID 

WHERE a.CountryRegionCode = 'US' 

GROUP BY a.TerritoryID