如何将列的值移动到banakaccount为null的上一行
以下是我的两个债权人TABLE1的表数据
UniqueDatabaseNo Creditor BankAccountNo
882370 300020 NULL
NULL 300020 NULL
NULL 300020 NULL
0 300020 NL21SOGE0946
NULL 300020 NULL
NULL 380910 NULL
0 380910 1432981
0 380910 NL98RABO0181
NULL 380910 NULL
2293483 380910 NULL
我需要低于其中的唯一数据库没有> 0和相同的行银行帐户应该在同一行
这是期望的输出
UniqueDatabaseNo Creditor BankAccountNo
882370 300020 NL21SOGE0946
2293483 380910 NL98RABO0181
我在下面尝试查询但是它无法正常工作
select * from TABLE1
where uniquedatabaseno >0
union all
select * from TABLE1
where BankAccountNo LIKE '[a-Z][a-Z]%'
谢谢,
答案 0 :(得分:2)
您可以使用聚合执行您想要的操作:
select max(UniqueDatabaseNo) as UniqueDatabaseNo, Creditor,
max(case when BankAccountNo like '[a-Z][a-Z]%' then BankAccountNo end) as BankAccountNo
from t
group by Creditor;
编辑:
您可能也是UniqueDatabaseNo
的条件逻辑:
select max(case when UniqueDatabaseNo > 0 then UniqueDatabaseNo end) as UniqueDatabaseNo
这不是您的样本数据所必需的。
答案 1 :(得分:1)
试试这个
select UniqueDatabaseNo,Creditor,TT.BankAccountNo
from TABLE1 T1
OUTER APPLY(
SELECT BankAccountNo as 'BankAccountNo'
FROM TABLE1 T2
WHERE T1.Creditor=T2.Creditor AND T2.BankAccountNo IS NOT NULL
)TT
where T1.uniquedatabaseno >0 AND T1.UniqueDatabaseNo IS NOT NULL
答案 2 :(得分:0)
您需要过滤掉NULL值:
SELECT * FROM TABLE1
WHERE
UniqueDatabaseNo > 0
AND BankAccountNo IS NOT NULL