我有一个表“FinancialTrans”,其中有很多字段,但其中只有 3 个字段与我有关。
AcctID TransTypeCode DateOfTrans Field 4 Field 5 Field 6....
123 TOLL 2016-06-06
123 TOLL 2016-06-02
123 TOLL 2016-04-28
123 PYMT 2016-03-11
123 TOLL 2015-12-22
123 TOLL 2015-12-22
我需要的:
当过去 2 年内没有 TOLL 或 PYMT 时,我需要打印一个 Flag。
所以用简单的逻辑来说:
(When TransTypeCode is 'TOLL' and the MAX(DateOfTrans) is more than 2 years ago) AND
(When TransTypeCode is 'PYMT' and the MAX(DateOfTrans) is more than 2 years ago)
所以到目前为止我的代码是:
select *,
(case when max(case when FT.TransTypeCode in ('TOLL', 'PYMT')
then FT.DateOfTrans
end)
over (partition by FT.Acctid) >= dateadd(year, -2, getdate())
then 0 else 1
end) as MyFlag
from #temp_TableA A
INNER JOIN FinancialTrans FT ON A.AccountId = FT.AcctId
但此代码会带来 FinancialTrans 表的所有其他字段,并将该帐号的每一行与前一个表连接起来。因此,每个帐号大约有 1200 个重复项。
问题:
1. 如何避免每个帐号重复 1200 个?
2.当满足上述两个条件时,如何获得一个给出标志的列。
Use GROUP BY
,因此您会得到单行帐户,而不是row_number
您可以在其中为每一行计算一些内容。
SELECT A.AcctID,
MAX(case when FT.TransTypeCode in ('TOLL', 'PYMT')
and FT.DateOfTrans >= dateadd(year, -2, getdate())
then 1
else 0
end) as flag
FROM #temp_TableA A
INNER JOIN FinancialTrans FT ON A.AccountId = FT.AcctId
GROUP BY A.AcctID
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)