感觉好难的SQL题,
感觉好难的SQL题,求助……
已知表如下格式:
零件号 数量 总数量
a 1 2
a -1 -2
a 2 5
b 2 2
b 3 6
b -3 -6
b 3 6
输出如下格式:
零件号 数量 总数量
a 2 5
b 2 2
b 3 6
就是如果一条零件号的数量和总数量和同一零件号的数量和总数相反,这2条就抵消了,把剩下的没被抵消的输出。
------解决方案--------------------
--先把小于0的行取出来 取绝对值。 然后进行EXCEPT 进行抵销操作。 因为你这个要进行EXCEPT DISTINCT 操作。所有用了个ROW_NUMBER 进行修改了下
select 零件号,数量 ,总数量 from
(select *,row_number () over(partition by 零件号,数量,总数量 order by (select 2)) as n from tablename where 数量>0)
except
(select 零件号,abs( 数量) as 数量,abs(总数量) as 总数量,
row_number() over(partition by 零件号,数量,总数量 order by (select 2) ) as n from tabelname
where 数量<0) as p
已知表如下格式:
零件号 数量 总数量
a 1 2
a -1 -2
a 2 5
b 2 2
b 3 6
b -3 -6
b 3 6
输出如下格式:
零件号 数量 总数量
a 2 5
b 2 2
b 3 6
就是如果一条零件号的数量和总数量和同一零件号的数量和总数相反,这2条就抵消了,把剩下的没被抵消的输出。
------解决方案--------------------
--先把小于0的行取出来 取绝对值。 然后进行EXCEPT 进行抵销操作。 因为你这个要进行EXCEPT DISTINCT 操作。所有用了个ROW_NUMBER 进行修改了下
select 零件号,数量 ,总数量 from
(select *,row_number () over(partition by 零件号,数量,总数量 order by (select 2)) as n from tablename where 数量>0)
except
(select 零件号,abs( 数量) as 数量,abs(总数量) as 总数量,
row_number() over(partition by 零件号,数量,总数量 order by (select 2) ) as n from tabelname
where 数量<0) as p