Sumowanie sum w zapytaniu z CASE

Sumowanie sum w zapytaniu z CASE
BU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 297
0

Cześć,
Mam taki fragment zapytania, które ma reprezentować obrót (Sprzedaż - zakup) na poszczególnych kontrahentach

Kopiuj
	CASE WHEN dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp) IN (65536, 65537, 65538, 196608, 327680, 327681) THEN 
		SUM(CASE WHEN (ob_TowRodzaj&16)>0 THEN 0 ELSE ob_WartNetto * ob_Znak * (-1) END) 
		ELSE SUM(CASE WHEN (ob_TowRodzaj&16)>0 THEN 0 ELSE ob_WartNetto * ob_Znak END) END as WartNetto,


Niestety w wyniku otrzymuję zdublowane rekordy. Chodzi o to, że jeśli dany kontrahent miał zakup i sprzedaż, to w jednym rekordzie dostaję zakup ze znakiem -, a w drugim sprzedaż. A chciałbym, żeby to się sumowało. Próbowałem zamknąć całość w SUM(), ale niestety otrzymałem błąd:

Kopiuj
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

Podpowie ktoś jak to ugryźć?

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
0
Buster napisał(a):

Chodzi o to, że jeśli dany kontrahent miał zakup i sprzedaż, to w jednym rekordzie dostaję zakup ze znakiem -, a w drugim sprzedaż. A chciałbym, żeby to się sumowało.

Jeśli masz dwa wiersze wyniku, to tego tajemnica jest poza podanym fragmentem, tkwi w grupowaniu, głównej tabeli seleca czy czymś podobnym, ale nie w elementarnym wyrażeniu. MY tego nie wiemy

BTW biznesowo suma sprzedaży i zakupu to dosc słabe, to (jeśli ma być użyteczne) zawsze dwie liczby, interpretujacy sobie coś z tym w głowie zrobi (prawdę mówiąc nawet miałby wątpliwosc czy sprzedaż dodawać do (minus) korekty sprzedaż, ale to co proponujesz to ewidentnie dziwne)

wemibo
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: okolice Warszawy
  • Postów: 128
0
Kopiuj
--TWOJ SELECT
with t as
(
select 1 id, 1 kwota
union select 2 , 2
union select 3 , 3
)
		select sum(
		case when t.id in (1) 
			then sum(case when 1=1 then 0 else kwota*(-1) end)
			else sum(case when 1=1 then 0 else kwota*(1) end)
		end
)
from t
Kopiuj
--POPRAWNY SELECT V1
with t as
(
select 1 id, 1 kwota
union select 2 , 2
union select 3 , 3
)
		select sum(
		case when t.id in (1) 
			then (case when 1=1 then 0 else kwota*(-1) end)
			else (case when 1=1 then 0 else kwota*(1) end)
		end
)
from t

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.