2017-12-01 12 views
0

次のようなSQLサブクエリがあります。オーバーパーティションに基づいていくつかの合計を計算します列のその後、私は自分自身でテーブルを内側にしたいので、日付の違いを得ることができます。それが表示されている 問題がある:カラムl 'は集計関数またはGROUP BY句に含まれていないため選択リストでは無効ですが、

列「tblFinansijskiPodaci.DatumVal」は、集計関数またはGROUP BY句に含まれていないため、選択リストでは無効です。

DATEDIFFに日付の値を挿入すると問題が発生しました。 '2017/08/25'、 '2011/08/25'のようなランダムな日付の値を挿入すると正常に動作します。

多分私の間違った場所に参加していますか?

これが私のクエリです:

SELECT P2.FinID, P2.Firma, P2.BrojDok, P2.DatumVal,P2.Saldo ,P2.SaldoTotal2, 
IIF(P2.SaldoTotal2<0,0,IIF(P2.SaldoTotal2<1,(DATEDIFF(DAY,P2.DatumVal, b.DatumVal)),0)) 
AS NumberOfDays 
FROM 
    (
    SELECT P1.FinID, P1.Firma,P1.BrojDok,P1.DatumVal,P1.Saldo,P1.SaldoTotal, 
    IIF(P1.SaldoTotal<0,0,IIF(P1.SaldoTotal>1,1,0)) AS SaldoTotal1, 
    IIF(P1.SaldoTotal<0,0,IIF(P1.SaldoTotal<1,0,1)) AS SaldoTotal2 
FROM 
    (
     SELECT P.FinID,P.Firma,P.BrojDok,P.DatumVal,P.Saldo , 
     SUM(Saldo) OVER (PARTITION BY BrojDok ORDER BY FinID) AS SaldoTotal 
    FROM 
     (
     SELECT a.FinID, a.Firma, a.Konto,a.NazivKonta, a.NazFirme, a.BrojDok, 
     a.DatumVal,a.Valuta, 
     Sum(IIf(a.[Konto] Like '2%',a.[Duguje] -a.[Potrazuje],a.[Potrazuje] -a.[Duguje])) 
     AS Saldo 
     FROM tblFinansijskiPodaci a WHERE a.Firma = 1 AND a.Konto = 2040 
     AND a.Partner = 1137 
     GROUP BY a.FinID,a.Firma,a.NazFirme,a.Konto,a.NazivKonta,a.BrojDok, 
     a.DatumVal,a.Valuta,a.Duguje,a.Potrazuje 
     ) AS P 
    GROUP BY FinID,Firma,BrojDok,Saldo,DatumVal 
    ) AS P1 
GROUP BY P1.FinID,P1.Firma,P1.BrojDok,P1.DatumVal,P1.Saldo,P1.SaldoTotal 
) AS P2 
INNER JOIN tblFinansijskiPodaci b ON b.BrojDok=P2.BrojDok 
GROUP BY P2.FinID,P2.Firma,P2.BrojDok,P2.Saldo,P2.SaldoTotal,P2.SaldoTotal1,P2.SaldoTotal2,P2.DatumVal 
     ORDER BY BrojDok 
+1

サブクエリが同じテーブルから4つの深さに入れ子になっているのを見ると、何かが中心に少し残っているという巨大な赤い旗です。書式設定が難しいため実際に何が起こっているのかを知ることは難しいですが、これは大幅に簡素化できると思われます。 –

答えて

1

はあなたの最後のGROUP BY句でb.DatumValを追加してください。

+0

あなたは正しいです!私はそれを見たとは信じられない。私はできるだけ早く答えを受け入れるでしょう – Alexander

+0

私はあなたを助けることができてうれしいです – NikNik

関連する問題