我在嘗試編寫一個查詢來總結一個表。創建一個基於標誌的過濾器視圖
我想知道最有效的方法是。
我的數據被組織爲例如:
ID | Value | Flag.
----------------------
1 | 45 | 0
1 | 52 | 1
2 | 35 | 0
3 | 50 | 0
如果ID重複兩次,比我想利用其中標誌= 1,否則我想利用零
我嘗試的值:
Select ID,
case when (select count(*) from table a2 where a2.id = a.id) = 2 THEN
1
ELSE
0
END flag,
case when (select count(*) from table a2 where a2.id = a.id) = 2 THEN
(select a2.value from table a2 where a2.id = a.id)
ELSE
a.value
END value
from table a
^^這將導致
1 | 52 | 1
1 | 52 | 1
2 | 35 | 0
3 | 50 | 0
我仍然需要擺脫重複(即。第一個或第二個條目需要被刪除,因爲現在我只需要每個ID一個值),但是在我進一步討論之前,我已經意識到這對於效率來說可能不是最理想的。
表中的行不是***「排序」 - 除非您使用'order by'指定順序,否則表格或查詢中不存在「第一行」。所以你需要一些條件,讓你在你的例子中選擇52比45。 –
你真的能做'case when(從表a2選擇count(*)where a2.id = a.id)= 2然後 (從表中選擇a2.value,其中a2.id = a.id)'this? a2不屬於'then'部分 – GurV
@GurwinderSingh我的錯誤,那是一個錯字,是的,我在plsql上試過它,然後發佈在這裏 –