gpt4 book ai didi

sql - 新手 SQL 更新问题

转载 作者:行者123 更新时间:2023-12-02 07:46:44 24 4
gpt4 key购买 nike

修改后的查询。[Id] 列对所有记录都是唯一的。查询应将 CorEURUSD 的正确值返回给 Symbol = EURUSD 和 Symbol = GBPUSD,其中 [Time] = [Time] 值。

 CREATE TABLE [dbo].[Tck2](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Symbol] [varchar](35) NULL,
[Time] [datetime] NULL,
[CorEURUSD] [decimal](14, 10) NULL,
[CorEURUSD2] [decimal](14, 10) NULL
) ON [PRIMARY]


INSERT [VT7STAB1].[dbo].[Tck2] ([Symbol],[Time],[CorEURUSD],[CorEURUSD2]) VALUES('EUR/USD', '2011-07-01 12:04:28.000', 0.8229, 0.6488)
INSERT [VT7STAB1].[dbo].[Tck2] ([Symbol],[Time],[CorEURUSD],[CorEURUSD2]) VALUES('EUR/USD', '2011-07-01 12:26:17.000', 0.9427, 0.6558)
INSERT [VT7STAB1].[dbo].[Tck2] ([Symbol],[Time],[CorEURUSD],[CorEURUSD2]) VALUES('EUR/USD', '2011-07-01 12:58:34.000', 0.7713, 0.5267)
INSERT [VT7STAB1].[dbo].[Tck2] ([Symbol],[Time],[CorEURUSD],[CorEURUSD2]) VALUES('GBP/USD', '2011-07-01 12:04:28.000', 0, 0)
INSERT [VT7STAB1].[dbo].[Tck2] ([Symbol],[Time],[CorEURUSD],[CorEURUSD2]) VALUES('GBP/USD', '2011-07-01 12:26:17.000', 0, 0)
INSERT [VT7STAB1].[dbo].[Tck2] ([Symbol],[Time],[CorEURUSD],[CorEURUSD2]) VALUES('GBP/USD', '2011-07-01 12:58:34.000', 0, 0)

运行以下查询以尝试将 CorEURUSD 列从 Symbol - 'EUR/USD' 复制到 Symbol = 'GBP/USD 的结果 CorEURUSD 列

update Tck2
set CorEURUSD = (
select CorEURUSD
from Tck2 T
where Symbol = 'EUR/USD')
where Symbol = 'GBP/USD'

出现了这个错误消息 512,级别 16,状态 1,第 1 行子查询返回了 1 个以上的值。当子查询跟在 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。声明已终止。

当我使用这个版本时..

update Tck2
set CorEURUSD = (
select CorEURUSD
from Tck2 T
where Symbol = 'EUR/USD')
where Symbol = 'GBP/USD'
and T.[Time] = [Time]

它抛出这个错误。

消息 4104,级别 16,状态 1,第 2 行无法绑定(bind)多部分标识符“T.Time”。

我希望这会更好,对于“大量混淆”感到抱歉,请修改答案以匹配上面的查询和表格,这应该是正确的。

最佳答案

只是基于松散规范的猜测,没有样本数据/期望的结果。

UPDATE t
SET t.[CorEURUSD] = x.[CorEURUSD]
FROM dbo.TicksForex AS t
INNER JOIN dbo.TicksForex AS x
ON t.[id] = x.[id]
WHERE
t.[Symbol] = 'GBP/USD'
AND x.[Symbol] = 'EUR/USD';

编辑 2011-07-03基于修订后的规范。 [Time] 真的会成为您进行此类更新的关键吗?听起来很冒险。无论如何,由于 [Time] 是我可以根据您的叙述和样本数据确定连接两行的唯一方法,这就是我假设您的意思(我也可以假设您只想更新 CorEURUSD 而不是 CorEURUSD2):

UPDATE t
SET t.[CorEURUSD] = x.[CorEURUSD]
FROM dbo.Tck2 AS t
INNER JOIN dbo.Tck2 AS x
ON t.[Time] = x.[Time]
WHERE t.Symbol = 'GBP/USD'
AND x.Symbol = 'EUR/USD';

实际上并没有那么大的修改,我只是改变了连接条件。

关于sql - 新手 SQL 更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6479479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com