将值从下行移动到上一行

时间:2016-03-23 11:03:29

标签: sql sql-server

如何将列的值移动到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]%'

谢谢,

3 个答案:

答案 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