更新时选择和案例'当/然后'

时间:2017-10-09 09:35:40

标签: mysql

当我尝试执行此操作时:

update YUmowa_Kontrahent  set YUK_Typ_Umowy=  'WS'
where YUK_IdObiekt in (select YO_Id,
sum(isnull(YROB_WZ_Woda,0))as woda,
sum(isnull(YROB_WZ_Scieki,0))as scieki ,
case 
    when sum(isnull(YROB_WZ_Woda,0))> 0 and sum(isnull(YROB_WZ_Scieki,0))>0 Then 'WS'
    end WS

    from YObiekt 
join YRozliczenie_Obiekt on YO_Id=YROB_IdObiekt
group by YO_Id)

我接受了:

  

Msg 116,Level 16,State 1,Line 45只有一个表达式   在未引入子查询时在选择列表中指定   存在。

我需要更新TYP UMOWY ='WS'EN DBO.YUMOWA_KONTRAHENT,其中包括'WODA'和&的总和记录。 'SCIEKI'> 0 我在子查询中指定了唯一ID'S so ???

2 个答案:

答案 0 :(得分:0)

UPDATE YUmowa_Kontrahent  
SET YUK_Typ_Umowy = 'WS'
WHERE YUK_IdObiekt IN (
    SELECT YO_Id
    FROM YObiekt 
        JOIN YRozliczenie_Obiekt ON YO_Id = YROB_IdObiekt
    GROUP BY YO_Id
    HAVING sum(isnull(YROB_WZ_Woda,0)) > 0 AND sum(isnull(YROB_WZ_Scieki,0)) > 0
)

查询中的子查询错误:

  1. 如果您使用除EXISTS之外的某些声明,则必须仅指定 选择列表中的一个表达式(正如您可以在错误中读到的那样) 消息)。

  2. 您的子查询返回所有YO_Id而不是仅返回该符号     条件sum(isnull(YROB_WZ_Woda,0)) > 0 AND sum(isnull(YROB_WZ_Scieki,0)) > 0

  3. 当然,我不知道你桌子的结构,但似乎 您不需要在子查询中连接两个表,而只使用表 使用字段YROB_WZ_SciekiYROB_WZ_Woda来获取ID。

答案 1 :(得分:0)

您的select错误,因为您无法在左侧1参数和右侧3参数上使用in

select *
from table
where a in (select a, b, c from table2)

相反,您应该使用:where a in (select a from table2)