2016-01-14 50 views
1

我的表中有數據如下:爲了從多個記錄列表中的特定記錄在SQL

Column1 Column2 Column3 
ACC1  940  1 
ACC1  950  1  
ACC1  950  50 
ACC2  940  1 
ACC2  950  50 
ACC3  940  1 
ACC4  950  1 
ACC5  950  50 

我的期望是獲取唯一的記錄w.r.t COLUMN1。
條件1:如果只有一個帳戶記錄,那麼檢索它。
條件2:如果多個記錄對於一個給定的帳戶,其中
只有一條記錄爲第3列值爲50,檢索這50值
記錄

+1

如果沒有這些條件得到滿足,然後記錄? –

+0

請告訴我們你已經嘗試過什麼,也需要輸出。 – saikumarm

回答

1

如果你想每column1值來獲得一個記錄,那麼這是一個優先級查詢。一種方法是使用窗口函數:

select t.* 
from (select t.*, 
      row_number() over (partition by column1 
           order by column3 desc 
           ) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

編輯:

如果這是一個過濾查詢,您希望無論是單條記錄或記錄與大於50的值,則仍然可以使用窗口函數:

select t.* 
from (select t.*, count(*) over (partition by column1) as cnt 
     from t 
    ) t 
where cnt = 1 or column3 >= 50; 
+0

謝謝。這解決了我的查詢。 –

0
SELECT * 
FROM table t1 
     INNER JOIN (SELECT column1, 
          Count(DISTINCT column1) AS count1 
        FROM table 
        GROUP BY column1) X 
       ON t1.column1 = X.column1 
WHERE x.count1 = 1 
+0

你在哪裏處理條件2? – knkarthick24

+0

50是最大值,因此seq num 1將檢索第1條記錄50.我在同一個查詢中有其他任務,如果多個記錄的值爲50,那麼我們有更多的條件。將在此工作。謝謝。 –

相關問題