根据字段值里面的字段名来更新数据

fireegg 2018-05-01 08:06:30
有A\B\C三表数据关联查出A表如下结果数据:
fname f_101 Fxzxm FCombobox Famount
aaa 1 114534 FPA1134 25.0000000000
bbb 0 114537 FPA1138 108.0000000000

FPA1134 和FPA1138在结果中是FCombobox 字段的值,同时这两个又是关联表中C表 的字段值,如何快速便捷方式将FAMOUNT更新到C表的FPA1134 和FPA1138,这两个值有变动的。就是设置了字段对应关系,要根据结果更新到这C表的指定字段中。谢谢
...全文
1197 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fireegg 2018-05-01
  • 打赏
  • 举报
回复
引用 7 楼 sinat_28984567 的回复:
[quote=引用 6 楼 fireegg 的回复:] 太感谢了,这是个好思路。非常感谢。这FPA字段值是不固定的,能否更灵活的方式不设置固定的字段名呢?谢谢:)
不固定的话可以使用动态拼接语句的方式实现,https://blog.csdn.net/sinat_28984567/article/details/79865046 楼主你先看看这个,有可以借鉴的东西,看看能不能写出来,如果不行的话,我明天写一下,要去睡觉啦[/quote] 大概明白了,非常感谢您,早点休息。谢谢
fireegg 2018-05-01
  • 打赏
  • 举报
回复
引用 5 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#A') is null
	drop table #A
Go
Create table #A([fname] nvarchar(23),[f_101] BIGINT,[Fxzxm] BIGINT,[FCombobox] nvarchar(27),[Famount] decimal(18,2))
Insert #A
select N'aaa',1,114534,N'FPA1134',25 union all
select N'bbb',0,114537,N'FPA1138',108
GO
if not object_id(N'Tempdb..#C') is null
	drop table #C
Go
Create table #C([FNAME] nvarchar(23),[FPA1134] int,[FPA1138] int,[FPA1139] int,[FPA1140] int)
Insert #C
select N'aaa',0,0,0,0 union all
select N'bbb',0,0,0,0
Go
--测试数据结束
UPDATE #C
SET [FPA1134] = CASE
                   WHEN FCombobox = 'FPA1134' THEN
                       Famount
                   ELSE
                       FPA1134
               END,
			   [FPA1138] = CASE
                   WHEN FCombobox = 'FPA1138' THEN
                       Famount
                   ELSE
                       FPA1138
               END,
			   [FPA1139] = CASE
                   WHEN FCombobox = 'FPA1139' THEN
                       Famount
                   ELSE
                       FPA1139
               END,
			   [FPA1140] = CASE
                   WHEN FCombobox = 'FPA1140' THEN
                       Famount
                   ELSE
                       FPA1140
               END
FROM #A
WHERE #A.fname = #C.FNAME;

SELECT * FROM #C
太感谢了,这是个好思路。非常感谢。这FPA字段值是不固定的,能否更灵活的方式不设置固定的字段名呢?谢谢:)
二月十六 2018-05-01
  • 打赏
  • 举报
回复
引用 6 楼 fireegg 的回复:
太感谢了,这是个好思路。非常感谢。这FPA字段值是不固定的,能否更灵活的方式不设置固定的字段名呢?谢谢:)
不固定的话可以使用动态拼接语句的方式实现,https://blog.csdn.net/sinat_28984567/article/details/79865046 楼主你先看看这个,有可以借鉴的东西,看看能不能写出来,如果不行的话,我明天写一下,要去睡觉啦
二月十六 2018-05-01
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([fname] nvarchar(23),[f_101] BIGINT,[Fxzxm] BIGINT,[FCombobox] nvarchar(27),[Famount] decimal(18,2))
Insert #A
select N'aaa',1,114534,N'FPA1134',25 union all
select N'bbb',0,114537,N'FPA1138',108
GO
if not object_id(N'Tempdb..#C') is null
drop table #C
Go
Create table #C([FNAME] nvarchar(23),[FPA1134] int,[FPA1138] int,[FPA1139] int,[FPA1140] int)
Insert #C
select N'aaa',0,0,0,0 union all
select N'bbb',0,0,0,0
Go
--测试数据结束
UPDATE #C
SET [FPA1134] = CASE
WHEN FCombobox = 'FPA1134' THEN
Famount
ELSE
FPA1134
END,
[FPA1138] = CASE
WHEN FCombobox = 'FPA1138' THEN
Famount
ELSE
FPA1138
END,
[FPA1139] = CASE
WHEN FCombobox = 'FPA1139' THEN
Famount
ELSE
FPA1139
END,
[FPA1140] = CASE
WHEN FCombobox = 'FPA1140' THEN
Famount
ELSE
FPA1140
END
FROM #A
WHERE #A.fname = #C.FNAME;

SELECT * FROM #C


fireegg 2018-05-01
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
FPA1134 是C表的字段名?C表的表结构是什么样的?
A表结构如下: fname f_101 Fxzxm FCombobox Famount aaa 1 114534 FPA1134 25.0000000000 bbb 0 114537 FPA1138 108.0000000000 C表结构是 FNAME FPA134 FPA1138 FPA1139 FPA1140 aaa bbb fname关联两表,将A表的FAMOUNT值更新到C表对应的字段去字段要取A表的 FCombobox 里面的值作为字段。
二月十六 2018-05-01
  • 打赏
  • 举报
回复
FPA1134 是C表的字段名?C表的表结构是什么样的?
fireegg 2018-05-01
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
给A表加一个触发器,当这两个值有变动前,先更新C表对应的数据。 更新语句关联更新就可以了,大概这样写 update c set FCombobox=inserted.FCombobox from inserted ,a where c.FCombobox =a.FCombobox and a.id = inserted.id
谢谢,A表才有FCombobox字段和FAMOUNT字段,其保存的值FPA1134 是C表里面的字段,是要根据A表的关系,将FAMOUNT的值更新到FCOMBOBOX对应的FPA1134 字段。 这样貌似不太符合。
二月十六 2018-05-01
  • 打赏
  • 举报
回复
给A表加一个触发器,当这两个值有变动前,先更新C表对应的数据。 更新语句关联更新就可以了,大概这样写 update c set FCombobox=inserted.FCombobox from inserted ,a where c.FCombobox =a.FCombobox and a.id = inserted.id

22,300

社区成员

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

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