如何在 SQL 中基于分区列值创建标志

问题描述 投票:0回答:1

我有一个有 2 列的表格,因此对于每笔贷款,字母 A、字母 B 或两者都将发送给贷款申请人。

基表

我需要创建一个新列,设置 Flag =1(如果发送字母 A)、2(如果发送字母 B)和 3(如果发送字母 A 和字母 B),如下

结果表

我尝试了一种方法来为特定字母的每笔贷款生成行号,如下所示。然后我需要找到那些 ROW_NUM =1 次数大于 1 的行并分配一个标志

选择*, ROW_NUMBER() OVER(PARTITION BY LOAN_NO, Letter ORDER BY LOAN_NO) AS ROW_NUM FROM TableA。

有人可以帮助我继续使用此方法或任何替代方法来设置标志。

sql flags
1个回答
0
投票

一种解决方案使用 CTE:

WITH CTE as
(  
SELECT LOAN_NO, Count(*) as LoanCount, Max(Letter) as MaxLetter, Min(Letter) as MinLetter
FROM TableA
GROUP BY LOAN_NO
)
SELECT A.LOAN_NO, A.Letter, 
       CASE LoanCount
       WHEN 1 THEN
          CASE MaxLetter 
          WHEN 'LetterA' THEN 1
          WHEN 'LetterB' THEN 2
          ELSE 0 END
       ELSE 3 END as Flag
          
FROM CTE C
INNER JOIN TableA A ON A.LOAN_NO=C.LOAN_NO
贷款_NO 旗帜
123 字母A 3
123 字母A 3
123 字母B 3
123 字母B 3
234 字母A 1
345 字母B 2
© www.soinside.com 2019 - 2024. All rights reserved.