2017-10-27 4 views
0

두 열의 차이를 계산하는 쿼리에 [Preko] 열이 있습니다. 숫자가 음수이면 양수로 표시해야하며, 긍정적 인 경우 그대로 유지해야합니다.이 경우 ABS를 사용할 수 없습니다. 사례를 시도했지만 작동하지 않았습니다. 내가 얻는 문제는 열 Preko가 유효하지 않다는 것입니다. 열의 숫자가 음수이면 긍정 표시, 그렇지 않으면 숫자 표시

는 IIF 내 두 번째 시도에 대한 코드입니다 :

SELECT FP.Firma 
     ,FP.NazFirme 
     ,FP.Konto 
     ,FP.NazivKonta 
     ,FP.Partner 
     ,FP.NazivPartnera 
     ,Sum(FP.Duguje) AS dug 
     ,Sum(FP.Potrazuje) AS pot 
     ,Sum(IIf([FP].[Konto] Like '2*' 
     ,[duguje]-[potrazuje] 
     ,[potrazuje]-[duguje])) AS USaldo 
     ,Sum(IIf([datumval]<= '1.1.2017' 
     ,IIf([FP].[Konto] Like '2*' 
     ,[duguje]-[potrazuje] 
     ,[potrazuje]-[duguje]),0)) AS [Preko] 
     ,IIf([Preko]<0,0,[Preko]) AS Preko1 
FROM tblFinansijskiPodaci FP 
Where FP.Firma = 1 
AND FP.Partner=1110 
GROUP BY FP.Firma 
     ,FP.NazFirme 
     ,FP.Konto 
     ,FP.NazivKonta, 
     ,FP.Partner 
     ,FP.NazivPartnera 
HAVING (((FP.Konto)=2040)) 
+3

더 쉽게 읽을 수 있도록 코드를 작성하십시오. 왜 'ABS'를 사용할 수 없습니까? "나는 그 사건을 시도했지만, 효과가 없었습니다."정말로 도움이되지 않습니다. 무엇을 시도 했습니까, 왜 작동하지 않았습니까? – HoneyBadger

+0

@a_horse_with_no_name MSAccess를 추측 할 수 있습니다. 거기에 IIF가 있다고 생각합니다. – xQbert

+0

@xQbert 또한 sql-server 2012+ 일 수 있습니다. https://docs.microsoft.com/en-us/sql/t-sql/functions/logical-functions-iif-transact-sql – MatSnow

답변

2

iif 섹션 대신 case 문을 사용할 수도 있습니다.

CASE WHEN Preko<0 THEN 0 ELSE Preko END 

또는

당신이 네거티브를 처리하는 방법에 따라 논리에 맞춰 더 많은 것 같다
CASE WHEN Preko<0 THEN -Preko ELSE Preko END 

.

+0

예. "..AS Preko"다음에이 부분을 삽입 할 수 있습니까? 아니면 결합해야합니까? – Alexander

+0

기본 검색어를 한 줄에 넣은 다음 *를 선택하십시오. Preko가 0보다 작을 경우 - Preko1에서 Preko1로 끝내거나 Preko1에서 수식으로 바꿉니다. –

1

HoneyBadger에 동의 - ABS는 ABS를 이동하는 방법 (-1) 1.의 APEX SQL 도구에서보세요 반환 빠른 포맷 옵션. 무료이며 코드를 훨씬 쉽게 읽을 수 있으므로 더 많은 답변을 얻을 수 있습니다.

1
WITH cte AS (
SELECT FP.Firma 
     ,FP.NazFirme 
     ,FP.Konto 
     ,FP.NazivKonta 
     ,FP.Partner 
     ,FP.NazivPartnera 
     ,Sum(FP.Duguje) AS dug 
     ,Sum(FP.Potrazuje) AS pot 
     ,Sum(IIf([FP].[Konto] Like '2*' 
     ,[duguje]-[potrazuje] 
     ,[potrazuje]-[duguje])) AS USaldo 
     ,Sum(IIf([datumval]<= '1.1.2017' 
     ,IIf([FP].[Konto] Like '2*' 
     ,[duguje]-[potrazuje] 
     ,[potrazuje]-[duguje]),0)) AS [Preko] 
FROM tblFinansijskiPodaci FP 
Where FP.Firma = 1 
AND FP.Partner=1110 
GROUP BY FP.Firma 
     ,FP.NazFirme 
     ,FP.Konto 
     ,FP.NazivKonta, 
     ,FP.Partner 
     ,FP.NazivPartnera 
HAVING (((FP.Konto)=2040)) 
) 
SELECT *, CASE WHEN Preko<0 THEN 0 ELSE Preko END preko1 FROM cte 
+0

이것이 전체 답변입니다. 저는 이전 답을 바탕으로 cte없이이 작업을 처리 했으므로 그 점을 대답으로 표시했습니다. 모두 도움이되었으므로 대단히 감사합니다! – Alexander

관련 문제