Oui, construisez une expression qui renvoie le ordertotal pour adhoc uniquement, et 0 pour les autres, et une autre qui fait le contraire, et additionnez ces expressions. Cela comprendra une ligne par emplacement avec deux colonnes, une pour ad hoc et une pour contracté...
SELECT Location,
Sum(Case When Contract_ID Is Null Then OrderTotal Else 0 End) AdHoc,
Sum(Case When Contract_ID Is Null Then 0 Else OrderTotal End) Contracted
FROM Orders
GROUP BY Location
si vous voulez vraiment des lignes séparées pour chacun, alors une approche serait de :
SELECT Location, Min('AdHoc') ContractStatus,
Sum(Case When Contract_ID Is Null
Then OrderTotal Else 0 End) OrderTotal
FROM Orders
GROUP BY Location
Union
SELECT Location, Min('Contracted') ContractStatus,
Sum(Case When Contract_ID Is Null
Then 0 Else OrderTotal End) OrderTotal
FROM Orders
GROUP BY Location
Order By Location