单表修改

hrangelet 2016-11-25 01:11:33
各位好,请教一个问题:
同一个表中(T):
有A字段为价格,B字段为类型,C字段为来源。
现在C字段来源不同(二种来源,有可能只有一种[不考虑一种来源的情况]),价格不同,类型相同的情况下。当价格C1大于C2的百分之十或者小于百分之10,则把C1的价格更改为A*1.1或者A*0.9。
请问该SQL如何写?


update HousingPrice set
Price=(select top 1 A.price*1.1 from HousingPrice A
where A.RealEstateID=RealEstateID AND A.Source<>Source and (A.price>price*1.1 or A.price<price*-1.1))
where Source='房价网'

更新的值都为NULL了,sql如何修改?
...全文
100 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hrangelet 2016-11-25
  • 打赏
  • 举报
回复
引用 11 楼 xiejiaen 的回复:

UPDATE A SET A.price = CASE WHEN A.price > B.price * 1.1 THEN B.price * 1.1 ELSE B.price * 0.9 END
FROM #HousingPrice A, #HousingPrice B
WHERE B.RealEstateID = A.RealEstateID AND B.Source <> A.Source
AND (A.price > B.price * 1.1 OR A.price < B.price * 0.9)
AND A.adjustflag = 'Y' AND B.adjustflag = 'N'
这里我增加了一个field : adjustflag 用来表示这些记录是需要更新的还是不更新的 因为你应该是指定更改某些来源的数据的吧?
谢谢,正是我需要的,牛逼!
巨巨巨 2016-11-25
  • 打赏
  • 举报
回复

UPDATE A SET A.price = CASE WHEN A.price > B.price * 1.1 THEN B.price * 1.1 ELSE B.price * 0.9 END
FROM #HousingPrice A, #HousingPrice B
WHERE B.RealEstateID = A.RealEstateID AND B.Source <> A.Source
AND (A.price > B.price * 1.1 OR A.price < B.price * 0.9)
AND A.adjustflag = 'Y' AND B.adjustflag = 'N'
这里我增加了一个field : adjustflag 用来表示这些记录是需要更新的还是不更新的 因为你应该是指定更改某些来源的数据的吧?
hrangelet 2016-11-25
  • 打赏
  • 举报
回复
引用 7 楼 wmxcn2000 的回复:
[quote=引用 6 楼 hrangelet 的回复:] 还在么? 能否详细按我那图写个出来给我参考下呢? 我的数据里面没有C1 C2的字段
C1、C2、A 这些字段,这都是你在题目给出来的; 你是想把 两个来源的数据做对比吗?[/quote] 是的,我是想把两个来源的数据做对比
hrangelet 2016-11-25
  • 打赏
  • 举报
回复
引用 7 楼 wmxcn2000 的回复:
[quote=引用 6 楼 hrangelet 的回复:]

还在么? 能否详细按我那图写个出来给我参考下呢? 我的数据里面没有C1 C2的字段


C1、C2、A 这些字段,这都是你在题目给出来的;

你是想把 两个来源的数据做对比吗?[/quote]

你好,这个图:

就想用查询数据如果存在RealEstateID重复的时候,用价格比较,房价网的price大于或小于房天下的 正负百分之10,则修改房价网的价格为房天下对应的价格的正负百分之10!
hrangelet 2016-11-25
  • 打赏
  • 举报
回复
引用 7 楼 wmxcn2000 的回复:
[quote=引用 6 楼 hrangelet 的回复:] 还在么? 能否详细按我那图写个出来给我参考下呢? 我的数据里面没有C1 C2的字段
C1、C2、A 这些字段,这都是你在题目给出来的; 你是想把 两个来源的数据做对比吗?[/quote] 你好,这个图: 就想用查询数据如果存在RealEstateID重复的时候,用价格比较,房价网的price大于或小于房天下的 正负百分之10,则修改房价网的价格为房天下对应的价格的正负百分之10!
卖水果的net 2016-11-25
  • 打赏
  • 举报
回复
引用 6 楼 hrangelet 的回复:
还在么? 能否详细按我那图写个出来给我参考下呢? 我的数据里面没有C1 C2的字段
C1、C2、A 这些字段,这都是你在题目给出来的; 你是想把 两个来源的数据做对比吗?
hrangelet 2016-11-25
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:

update t 
set C1 = case when C1> C2 * 0.1 then A * 1.1 when C1 < C2*0.1 then A * 0.9 end
where (C1> C2 * 0.1 or C1 < C2*0.1) 
 and source .....
还在么? 能否详细按我那图写个出来给我参考下呢? 我的数据里面没有C1 C2的字段
hrangelet 2016-11-25
  • 打赏
  • 举报
回复
引用 3 楼 wmxcn2000 的回复:
1# 的语句,有什么问题吗 ?
如我回复你的那张图所示!
hrangelet 2016-11-25
  • 打赏
  • 举报
回复
引用 3 楼 wmxcn2000 的回复:
1# 的语句,有什么问题吗 ?
没有C1、C2的字段啊,纵向比较,不是横向!
卖水果的net 2016-11-25
  • 打赏
  • 举报
回复
1# 的语句,有什么问题吗 ?
hrangelet 2016-11-25
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:

update t
set C1 = case when C1> C2 * 0.1 then A * 1.1 when C1 < C2*0.1 then A * 0.9 end
where (C1> C2 * 0.1 or C1 < C2*0.1)
and source .....


卖水果的net 2016-11-25
  • 打赏
  • 举报
回复

update t 
set C1 = case when C1> C2 * 0.1 then A * 1.1 when C1 < C2*0.1 then A * 0.9 end
where (C1> C2 * 0.1 or C1 < C2*0.1) 
 and source .....

22,207

社区成员

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

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