我有子查询来计算一些总和。根据Saldo列中的值,我想操纵并减去一些日期列。我的问题是我得到了重复的行。
我希望每个FinID都有一行,如果BrojDok相同,我想根据Saldo列中的值减去日期。我的datediff
正在运作。但是有重复的行。我该如何管理?
我尝试使用DISTINCT
,但它只给了我第一行唯一。如果在内连接中我添加加入b.FinId = P2.Fin
我的天数将始终为零,因为每一行都将自行加入。
FinID是我表的PK
这是我的疑问:
SELECT P2.FinID
,P2.Firma
,P2.BrojDok
,P2.DatumVal
,P2.Saldo
,P2.SaldoTotal2
,NumberOfDays = IIF(P2.SaldoTotal2<0
,0
,IIF(P2.SaldoTotal2<1
,(DATEDIFF(DAY,P2.DatumVal, b.DatumVal))
,0)
)
FROM
(
SELECT P1.FinID
, P1.Firma
,P1.BrojDok
,P1.DatumVal
,P1.Saldo
,P1.SaldoTotal
,SaldoTotal1 = IIF(P1.SaldoTotal<0
,0
,IIF(P1.SaldoTotal>1
,1
,0)
)
,SaldoTotal2 = IIF(P1.SaldoTotal<0
,0
,IIF(P1.SaldoTotal<1
,0
,1)
)
FROM
(
SELECT P.FinID
,P.Firma
,P.BrojDok
,P.DatumVal
,P.Saldo
,SaldoTotal = SUM(Saldo) OVER (PARTITION BY BrojDok ORDER BY FinID)
FROM
(
SELECT a.FinID
,a.Firma
,a.Konto
,a.NazivKonta
,a.NazFirme
,a.BrojDok
,a.DatumVal
,a.Valuta
,Saldo = Sum(IIf(a.[Konto] Like '2%'
,a.[Duguje] -a.[Potrazuje]
,a.[Potrazuje] -a.[Duguje])
)
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
这是我的结果:
这是我想要的BrojDok 1379.但这是没有内连接的结果,所以我的天数不起作用。
我需要根据Saldo专栏的值减去日期。