我想使用[Recipient on contract]
和某些[DB].[dbo].[Check_Result]
条件来填充表update
的列case when
。
该错误似乎位于Set [Recipient on contract] =
语句附近。
这是运行查询时收到的以下错误消息:
“子查询返回的值不止1个。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。”
我特别引起您注意查询的SET [column] =多行部分。
--add an empty column
Alter table [DB].[dbo].[Check_Result]
add [Recipient on contract] varchar(200)
--Check_rules
update [DB].[dbo].[Check_Result]
Set [Recipient on contract] =
case when 'Personne morale' in(select [Bénéficiaire]
from [DB_SANOFI].[dbo].All_Contracts$) then
case when (select [Organisme]
from [DB_SANOFI].[dbo].All_Contracts$) is not null then (select substring(Organisme, 1 ,PATINDEX('%(%', Organisme)-1) from All_Contracts$)
else (select substring([Professionnel de santé], 1 ,PATINDEX('%/%', [Professionnel de santé])-1) from All_Contracts$)
end
else
case when (select [Professionnel de santé]
from [DB_SANOFI].[dbo].All_Contracts$) is not null then (select substring([Professionnel de santé], 1 ,PATINDEX('%/%', [Professionnel de santé])-1) from All_Contracts$)
else (select substring(Organisme, 1 ,PATINDEX('%(%', Organisme)-1) from All_Contracts$)
end
end;
答案 0 :(得分:0)
您提供的错误消息说明了您所遇到的确切问题。您用于选择要放入[Recipient on contract]
的值的查询返回多个值。您需要缩小子查询的范围,以仅返回一条记录。
它可能是任何一个子查询:
select substring(Organisme, 1 ,PATINDEX('%(%', Organisme)-1) from All_Contracts$
select substring([Professionnel de santé], 1 ,PATINDEX('%/%', [Professionnel de santé])-1) from All_Contracts$
select substring([Professionnel de santé], 1 ,PATINDEX('%/%', [Professionnel de santé])-1) from All_Contracts$
select substring(Organisme, 1 ,PATINDEX('%(%', Organisme)-1) from All_Contracts$
尝试运行其中的每一个,并找出哪个(可能是所有这些,因为您没有通过WHERE
子句限制它们)会给您带来不止一个的结果。
答案 1 :(得分:0)
这不是答案,但可以帮助您解决自己的问题。让我们首先将查询简化为一种情况:
update [DB].[dbo].[Check_Result]
Set [Recipient on contract] =
(select substring([Professionnel de santé], 1 ,
PATINDEX('%/%', [Professionnel de santé])-1)
from All_Contracts$)
现在仔细看。子查询将在All_Contracts $中返回EVERY ROW的值。您没有将该子查询与外部(更新)语句中的表相关联,因此引擎很乐意生成子查询的结果集,然后尝试将许多(即使只有2个)行分配给Check_Result的每一行中的列表。它无法做到这一点,所以您会遇到错误。
因此关键是要关联所有这些子查询。为了正确地做到这一点,一个人需要了解您所引用的表之间的关系(也许您偶然或错误地遗漏了其他表)。如果您可以提供该信息,则可能会有人提供帮助。
请注意,这是相当复杂的sql-对于初学者来说肯定不是什么。您是否考虑过向大型咨询公司寻求当地资源的帮助?
旁注。您正在引用不同数据库中的表。对 all 表不使用3个零件名称,会增加错误的风险。您至少有2个对All_Contracts $的引用,这些引用既没有数据库也没有架构。另外,您的许多情况在逻辑上似乎都是不正确的。它们不会产生语法或运行时错误,但可能不会产生正确的结果。再一次-如果您可以从同事那里获得帮助,您将受益匪浅。