2017-10-27 8 views
0

2つの列の差を計算するクエリに[Preko]列があります。数値が負の場合は、それが肯定的であれば、それは変わらないはずです。私はこの中でABSを使うことはできません。私はそのケースを試しましたが、うまくいかなかったのです。 私が得ている問題は、列Prekoが無効であることです。列の数値が負の場合は肯定、そうでない場合は数字

これは、IIFと私の2回目の試行のためのコードです:

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

メインクエリを1つのラップに入れてから*を選択するか、*を選択します。Prekoの場合は0を入力します。Preko1の場合はPreko1に、またはprekoの場合はcaseに代入します。 –

1

HoneyBadgerに同意します - ABSはABSを移動するための方法である(-1)のためのAPEX SQLツールを見てください1を返します。クイックフォーマットオプション。無料でコードを読みやすくして、より多くの回答を得ることができます。

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

関連する問題