[英]How to convert one column values to two different column values based on other column in SQL Server?
[英]SQL Server how to define other column values based on one column on subquery inner join?
我有一个查询,该查询在同一张表上使用内部联接并计算一些余额。 我为此使用分区。 并根据余额值减去一些日期。
我的查询工作正常,但是有问题。 如果连接的平衡天数最终为零,则我需要所有具有相同BrojDoK
(内部连接所基于的列)的列都为零。
这是我到目前为止的结果:
我需要的是在这种情况下,对于BrojDok = 648
,由于末尾的BalanceTotal
为0,因此我还需要FinID = 5856
的BalanceDays
也为零。
我想得到这样的东西:
我能以某种方式计算另一列可以做到这一点吗?
我一直在寻找更新方法,但是我无法对此做任何事情。
到目前为止,这是我的查询:
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.