在子查询中连接同一个表后重复的行

时间:2017-12-01 19:18:00

标签: sql sql-server subquery

我有子查询来计算一些总和。根据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

这是我的结果:

enter image description here

这是我想要的BrojDok 1379.但这是没有内连接的结果,所以我的天数不起作用。

我需要根据Saldo专栏的值减去日期。

enter image description here

0 个答案:

没有答案