我有两个表x,y。 | ||||
x | ||||
代码 | 类型 | 单价 | ||
A | y.列1 | |||
B | y.列2 | |||
C | y.列3 | |||
D | y.列1 | |||
y | ||||
代码 | 列1 | 列2 | 列3 | |
A | 1.5 | 2.5 | 3 | |
B | 2.5 | 1.5 | 2.8 | |
C | 3 | 2.5 | 1.8 | |
D | 4.5 | 3.6 | 7.2 | |
想通过SQL语句UPDATE更改 x表的A单价为1.5 | ||||
B单价为1.5 | ||||
C单价为1.8 | ||||
D单价为4.5 |
我有两个表x,y。 | ||||
x | ||||
代码 | 类型 | 单价 | ||
A | y.列1 | |||
B | y.列2 | |||
C | y.列3 | |||
D | y.列1 | |||
y | ||||
代码 | 列1 | 列2 | 列3 | |
A | 1.5 | 2.5 | 3 | |
B | 2.5 | 1.5 | 2.8 | |
C | 3 | 2.5 | 1.8 | |
D | 4.5 | 3.6 | 7.2 | |
想通过SQL语句UPDATE更改 x表的A单价为1.5 | ||||
B单价为1.5 | ||||
C单价为1.8 | ||||
D单价为4.5 |
X表中有 单价的字段 直接
update x表 set 单价='1.5' where 代码='A'
这是典型的列转行
提供思路:先列转行(实例网上一大把)、再group by 取min 就OK
最好用递归查询,固定的case三种,增加了第四种又要改代码,
木鱼吖的也不好好的给别人说,搪塞别人:
declare @SQL varchar(max) set @SQL=''
SELECt @SQL=@SQL+' UPDATE x set 单位=' + 类型+ ' from x join y on x.代码=y.代码 where x.类型='''+类型+'''' from (select distinct 类型 from X)b PRINT @SQL exec (@SQL)
update x set 单价= case when 类型='y.列1' then (select 列1 from y where y.代码=x.代码) when 类型='y.列2' then (select 列2 from y where y.代码=x.代码) when 类型='y.列3' then (select 列3 from y where y.代码=x.代码)
else ''
end
没测试过,自以为是的,如果错了告诉我。
你这个更新比较麻烦,建议用程序逻辑来实现,或用多条语句合并起来,否则可能很麻烦。
比如一次执行下面三条语句,可以达到你的要求:
update x set 单价=(select 列1 from y where y.代码=x.代码) where x.类型='y.列1' update x set 单价=(select 列2 from y where y.代码=x.代码) where x.类型='y.列2' update x set 单价=(select 列3 from y where y.代码=x.代码) where x.类型='y.列3'