Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中一行需要两列_Sql_Sql Server - Fatal编程技术网

SQL中一行需要两列

SQL中一行需要两列,sql,sql-server,Sql,Sql Server,考虑到下面的值,我需要具有相同ID的记录位于同一行,前提是支付值或利息值为0,而另一个为0。在这种情况下,ID=1将在一行上,但其他行将保持不变 declare @t table(id int, paid varchar(20), interest varchar (20)) insert into @t values(1, '0.00', '3.51'), (1, '1000', '0.00'), (3, '2.50', '0

考虑到下面的值,我需要具有相同ID的记录位于同一行,前提是支付值或利息值为0,而另一个为0。在这种情况下,ID=1将在一行上,但其他行将保持不变

declare @t table(id int, paid varchar(20), interest varchar (20))
insert into @t values(1, '0.00', '3.51'),
                 (1, '1000', '0.00'),
                 (3, '2.50', '0.00'),
                 (4, '50.00', '2.20'),
                 (4, '75.00', '0.10')
select * from @t
我需要这样的结果:

   ID     Paid      Interest
   1      1000         3.51
   3      2.50         0.00
   4      50.00        2.20
   4      75.00        0.00

我尝试使用windows函数创建一些东西,但无法实现。有人有什么想法吗?

嗯。这种方法将列分开,然后重新组合它们

试试这个:

select coalesce(ti.id, tp.id), tp.paid, ti.interest
from (select t.*,
             row_number() over (partition by paid) as seqnum
      from t
      where paid <> 0
     ) tp full join
     (select t.*,
             row_number() over (partition by interest) as seqnum
      from t
      where interest <> 0
     ) ti
     on tp.id = ti.id and tp.seqnum = ti.seqnum;