求SQL

zhuz988 2012-06-14 04:43:00
TB1
F1 F2 F3
--------------------------
1 A -10
2 A 5
3 A 20
4 A 32
1 B 5
2 B 20
1 C 8

F2中内容相同时,通过F3的后一条记录和上一条比较,只允许出现第一次的正数,后续的记录以0显示,希望得到的结果:
F1 F2 F3
--------------------------
1 A -10
2 A 5
3 A 0
4 A 0
1 B 5
2 B 0
1 C 8



...全文
68 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bean_sql 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

SQL code

--F1 F2 F3
--------------------------
with tb as
(
select 1 as F1,'A' as F2,-10 as F3 union all
select 2,'A',5 union all
select 3,'A',20 union all
select 4,'A',32 u……
[/Quote]
發糞塗牆 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code

--F1 F2 F3
--------------------------
with tb as
(
select 1 as F1,'A' as F2,-10 as F3 union all
select 2,'A',5 union all
select 3,'A',20 union all
select 4,'A',32 union all
select 1,'B',5 ……
[/Quote]刚想到一点就给你抢了,好过分
bean_sql 2012-06-14
  • 打赏
  • 举报
回复

--F1 F2 F3
--------------------------
with tb as
(
select 1 as F1,'A' as F2,-10 as F3 union all
select 2,'A',5 union all
select 3,'A',20 union all
select 4,'A',32 union all
select 1,'B',5 union all
select 2,'B',20 union all
select 1,'C',8
),
tb2 as
(
----------------------------------------增加一列用于区别是否大于0
select *,
case when F3>0 then 0 else 1 end as v_case
from tb
),
tb3 as
(
----------------------------------------针对于大于0的 找到一条单据
select *,
ROW_NUMBER() over(partition by F2,v_case order by F3) as v_row
from tb2
)
select
----------------------------------------找到小于0 及 (大于0的一条数据)
F1,
F2,
case when v_row=1 then F3 else 0 end as F3
from tb3
order by F2,F1
/*
F1 F2 F3
----------- ---- -----------
1 A -10
2 A 5
3 A 0
4 A 0
1 B 5
2 B 0
1 C 8

(7 row(s) affected)
*/

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧