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