簡體   English   中英

SQL Server如何基於子查詢內部聯接上的一列定義其他列值?

[英]SQL Server how to define other column values based on one column on subquery inner join?

我有一個查詢,該查詢在同一張表上使用內部聯接並計算一些余額。 我為此使用分區。 並根據余額值減去一些日期。

我的查詢工作正常,但是有問題。 如果連接的平衡天數最終為零,則我需要所有具有相同BrojDoK (內部連接所基於的列)的列都為零。

這是我到目前為止的結果:

在此處輸入圖片說明

我需要的是在這種情況下,對於BrojDok = 648 ,由於末尾的BalanceTotal為0,因此我還需要FinID = 5856BalanceDays也為零。

我想得到這樣的東西:

在此處輸入圖片說明

我能以某種方式計算另一列可以做到這一點嗎?

我一直在尋找更新方法,但是我無法對此做任何事情。

到目前為止,這是我的查詢:

SELECT 
    S2.FinID, S2.Firma, S2.Konto, S2.Partner,
    S2.BrojDok, S2.DatumVal, S2.pot, S2.dug,
    S2.Balance, S2.BalanceTotal,
    IIF(S2.BalanceTotal > 0,
        IIF(S2.BalanceTotal < 1, DATEDIFF(DAY, S2.MinDate, S2.MaxDate),
                                 DATEDIFF(DAY, S2.DatumVal, GETDATE())),
    IIF(S2.BalanceTotal = 0, 0, 0)) AS BalanceDays
FROM
    (SELECT 
         S1.FinID, S1.Firma, S1.NazFirme, S1.Konto, S1.NazivKonta,
         S1.Partner, S1.NazivPartnera, S1.BrojDok, S1.DatumVal, 
         S1.pot, S1.dug, S1.Balance, S1.MaxDate, S1.MinDate,
         SUM(S1.Balance) OVER (PARTITION BY S1.BrojDok ORDER BY S1.FinID) AS BalanceTotal
     FROM
         (SELECT 
              t1.FinID, t1.Firma, t1.NazFirme, t1.Konto, t1.NazivKonta, 
              t1.Partner, t1.NazivPartnera, t1.BrojDok, t1.DatumVal,
              SUM(t1.Duguje) AS dug, SUM(t1.Potrazuje) AS pot,
              SUM(IIF(t1.[Konto] LIKE '2%', t1.[Duguje] - t1.[Potrazuje], t1.[Potrazuje] -t1.[Duguje])) AS Balance,
              MAX(t2.DatumVal) AS MaxDate,
              MIN(t2.DatumVal) AS MinDate 
          FROM 
              tblFinansijskiPodaci t1
          INNER JOIN
              tblFinansijskiPodaci t2 ON t1.BrojDok = t2.BrojDok
          WHERE 
              t1.Firma = 1 AND t1.Konto = 2040 AND t1.Partner = 1102
              AND t2.Firma = 1 AND t2.Konto = 2040 AND t2.Partner = 1102
         GROUP BY 
             t1.FinID, t1.Firma, t1.NazFirme, t1.Konto, t1.NazivKonta,
             t1.Partner, t1.NazivPartnera, t1.BrojDok, t1.DatumVal) AS S1
   ) AS S2
ORDER BY 
    BrojDok

由於末尾的BalanceTotal為0,我需要FinID = 5856的BalanceDays也為零。

在這一行:

IIF(S2.BalanceTotal = 0, 0, 0)) AS BalanceDays

將S2.BalanceTotal替換為一個子查詢,該子查詢“最后”檢查BalanceTotal。

如果有人需要這樣的東西,我找到了解決方案,我只添加了計算MIN OVER PARTITION BY的列。

就我而言:

MIN(S3.BalanceDays) OVER (PARTITION BY S3.BrojDok) AS BalanceDays1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM