如果让某一列的值减少一个值.

pigsanddogs 2006-08-27 09:54:00
a b c
14 87 1
14 88 2
14 72 3
14 89 4
14 90 5
14 91 6
14 92 7
14 93 8
15 87 1
15 88 2
15 94 3
15 95 4
15 96 5
15 97 6
15 98 7
15 99 8
18 87 1
18 88 2
18 112 3
18 113 4
18 114 5
18 115 6
18 116 7
32 87 1
32 72 2
32 191 3
32 192 4
32 193 5
32 194 6
32 195 7
32 196 8
32 197 9
120 87 1
120 107 2
120 533 3
120 62 4
120 310 5
120 311 6
120 292 7
120 558 8
120 559 9
120 560 10
120 561 11
120 524 12
120 562 13
120 433 14
120 525 15
120 526 16
122 87 1
122 107 2
122 112 3
122 114 4
122 115 5
122 116 6
122 283 7
122 348 8
122 282 9
122 280 10
122 564 11
122 24 12
122 81 13
122 80 14
122 74 15
122 87 16
153 106 1
153 100 2
153 87 3
153 88 4
153 112 5
153 113 6
153 191 7
153 192 8
153 272 9
153 291 10
153 292 11
153 652 12
153 558 13
153 653 14
153 654 15
153 655 16
156 87 1
156 178 2
156 72 3
156 113 4
156 507 5
156 290 6
156 254 7
156 313 8
156 256 9

在这个表中对c进行操作, 让c的值减少一个 b为87时的值, 可能我表达的不好
如a为14时, b为87时, c为1, 那么这个表中所有a为14的记录, c的值都减少一个1
a为15时,b为87时, c的值也是1, 那么所有a为15的记录, c的值也减少一个1

还有, 可能同时出现a为14,b为87的多条记录, 那么c的值则为
select min(c) from table where a=14 and b=87
所有a为14的记录都减少这个min(c)的值.
如果操作? 谢谢.

...全文
264 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
pigsanddogs 2006-08-30
  • 打赏
  • 举报
回复
已解决
toto1980 2006-08-28
  • 打赏
  • 举报
回复
借楼上的用下:
select t.a,t.b,(t.c-m.c) as c
from (你的子查询) t join (select a,b,min(c) as c from 你的子查询 group by a,b) m
on t.a=m.a and t.b=m.b and m.b=87
:)
xyxfly 2006-08-28
  • 打赏
  • 举报
回复
那你是什么意思,鄙人愚钝 -_-
xyxfly 2006-08-28
  • 打赏
  • 举报
回复
to yl259443()
你的方法可以. 但是"表"不是实际存在, 是一个子查询. 而且我在这个子查询的基础上
在子查询一下(过滤一下)并不是真正的更新
有什么办法优化吗??

借楼上的用下:
select t.a,t.b,(t.c-m.c) as c
from (你的子查询) t join (select a,b,min(c) as c from 表 group by a,b) m
on t.a=m.a and t.b=m.b and m.b=87

你不是这个意思??

toto1980 2006-08-28
  • 打赏
  • 举报
回复
借用yl259443()的
select t.a,t.b,(t.c-m.c) as c
from 表 t join (select a,b,min(c) as c from 表 group by a,b) m
on t.a=m.a and t.b=m.b and m.b=87
pigsanddogs 2006-08-28
  • 打赏
  • 举报
回复
继续等待高手。
to xyxfly: 你没明白我的意思。
xyxfly 2006-08-28
  • 打赏
  • 举报
回复
你的方法可以. 但是"表"不是实际存在, 是一个子查询. 而且我在这个子查询的基础上
在子查询一下(过滤一下)并不是真正的更新
有什么办法优化吗?



可以用表别名,不是实际更新可以select t.a,t.b,c=...
xyxfly 2006-08-28
  • 打赏
  • 举报
回复
你不能用视图?那临时表估计也不行?

给你出个怪招

declare @sql varchar(8000)

select @sql=你的子查询

以后就用这个@sql了(用动态sql)

......
xyxfly 2006-08-28
  • 打赏
  • 举报
回复
用视图啊
pigsanddogs 2006-08-28
  • 打赏
  • 举报
回复
那样 你的子查询 就出现2份了

这个字查询就很复杂, 那么我的sql语句就很长了
我只想保留一份。

所以需要优化一下。。
didi_hb_005 2006-08-28
  • 打赏
  • 举报
回复
up

---------------------------------------------------------------------------------------------
腰缠70元到月入近10万
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=453

IT工程师 毕业4年我年薪涨到30万
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=511

26岁青年坐拥千万域名资产 从小玩家变成CEO
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=515

程序员的酸甜苦辣:告别Coding
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=341

从月薪3500到700万(一)
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=170

网络草根月赚3000的十种方法
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=517

如果我是女的 我肯定不会嫁给做网站的
http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=512
pigsanddogs 2006-08-27
  • 打赏
  • 举报
回复
to yl259443()
你的方法可以. 但是"表"不是实际存在, 是一个子查询. 而且我在这个子查询的基础上
在子查询一下(过滤一下)并不是真正的更新
有什么办法优化吗?
pigsanddogs 2006-08-27
  • 打赏
  • 举报
回复
期待高手.
xyxfly 2006-08-27
  • 打赏
  • 举报
回复
不希望出现2次'中华路'
??
group by?


听不懂你要问什么 -_-
好象跟你之前问的偏离了 。。。
yl259443 2006-08-27
  • 打赏
  • 举报
回复
update t set c=c-m.c
from 表 t join (select a,b,min(c) as c from 表 group by a,b) m
on t.a=m.a and t.b=m.b and m.b=87
pigsanddogs 2006-08-27
  • 打赏
  • 举报
回复
因为这个a的值不是固定的, 不一定就是14, 是这个表中查出来的,
我不想写循环.
另外, 这个表是一个比较复杂的关联查询.
select stbus_bus_id, stbus_station_id, stbus_sort_num from tblstationbus
where stbus_bus_id in
(
select stbus_bus_id from tblstation, tblstationbus
where stbus_station_id = station_id
and station_name='中华路'
)

是这样得到的a,b,c这个表
那个87其实是在另外一个表tblstation中的, 有个station_id和station_name,
我现在只知station_name是'中华路', 但可以查这个表那个station_id为87.

有没什么办法在我上面那条sql语句中优化一下, 不希望出现2次'中华路'
xyxfly 2006-08-27
  • 打赏
  • 举报
回复
update t set c=c-(select min(c) from t where a=14 and b=87) where a=14
再加个条件where a=14
其他情况一样
xyxfly 2006-08-27
  • 打赏
  • 举报
回复
update t set c=c-(select min(c) from t where a=14 and b=87)

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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