2017-10-09 59 views
0

當我嘗試執行此:更新與選擇和案件 '時,/然後'

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) 

我收到:

消息116,級別16,狀態1,第45行只有一個表達式當子查詢未與 EXISTS一起引入時,可以在選擇列表中指定 。

我需要更新TYP UMOWY = 'WS' ON DBO.YUMOWA_KONTRAHENT其後的總和記錄 'WODA' & 'SCIEKI'> 0 i的子查詢中指定的唯一ID是如此???

+1

MySQL的SQL = -server – FLICKER

+0

如何使用[IN](https://www.w3schools.com/sql/sql_in.asp) – RubahMalam

回答

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。
+0

添加解釋 – Thamaraiselvam

0

select是錯誤的,因爲你不能使用in左側1個參數,右邊3個參數:

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

相反,你應該使用:where a in (select a from table2)