2017-04-19 75 views

回答

1

是的,這是好的。在此上下文中的查詢稱爲標量子查詢。它需要返回一列(通常)和最多一行。

這種特殊的版本,不過,有問題:

SELECT (CASE WHEN COL_1 LIKE '%4' 
      THEN (SELECT MAX(COL_1) FROM TAB_1) 
      ELSE MAX(COL_1) 
     END) AS "RESULT" 
FROM TAB_1 

特別是,對於CASE WHEN工作,那麼COL_1需求是在GROUP BY。然而,這將是很奇怪,然後採取最大限度。

我懷疑你打算兩列或兩行:

SELECT MAX(CASE WHEN COL_1 LIKE '%4' THEN COL_1 END) as MAX_4 
     MAX(CASE WHEN COL_1 LIKE '%4' THEN NULL ELSE COL_1 END) as MAX_not4 
FROM Ttabl_1 
+0

謝謝戈登。我錯誤地在那裏輸入了一個錯誤的場景。查詢應該是這樣的: SELECT(CASE WHEN COL_1 LIKE '%4' THEN(SELECT MAX(COL_1)FROM tab_1中,其中COL LIKE '%4') ELSE MAX(COL_1) END)中的 「結果」 FROM TAB_1 所以我想要得到的是,如果有一些以4結尾的值,查詢應該獲取以4結尾的最高值。否則它應該從COL_1返回最高值。結果應該只是一個值或一行。 –

0

是有可能做到這一點,這裏是該

一個例子,假設下面兩個表

表1 :CITY(ID,NAME,COUNTRYCODE)

表2:國家(代碼,名稱,大區,地區)

對於上述表格,您可以使用查詢作爲

select id, 
      case when countrycode like 'AUS' 
      then (select name from country where code like 'AUS') 
      else countrycode end 
    from city; 
+0

感謝Kunal,但在我的情況下,我正在使用一個聚合函數,因爲它會拋出一個錯誤 - 不像一個函數組,就像Gordon指出的那樣。任何想法解決它?我嘗試在THEN部分的子查詢末尾添加group by子句。 –

+0

看看你想達到什麼你可以做這樣的事情: max_value爲(從tab_1選擇max(col_1)) select col_1 like'%4' then(從tab_1選擇max(col_1)where col_1,如'%4') else(select * from max_value)end from tab_1; 或者您可以將(從tab_1選擇max(col_1))分配給一個變量並使用它。 –

+0

沒有成功。即使使用WITH子句,它仍會拋出相同的錯誤 - 不是按表達式分組。 –