2011-04-12 41 views
1

我想弄清楚如何從我的表中抽取不同的數據場景進行測試。假設我的表格有這三個字段FIELD1, FIELD2, FIELD3。如果我想在我的數據中找到各種情況,我可以簡單地做到這一點Oracle - 來自多個列的唯一值組合,但返回其他列

select distinct FIELD1, FIELD2, FIELD3 from <table> 

而且這個工作。問題是我有很多其他領域需要數據,但只要它與結果記錄相關聯,數據是什麼並不重要。因此,例如,如果上述查詢返回這個作爲結果之一

FIELD1 FIELD2 FIELD3 
---------------------- 
Y  Blue 31 

我想看看其他內容字段(4至10可以說)。現在來自記錄編號#30或記錄#20000(假設這些記錄包含這3個返回值),只要所有字段都由所述記錄返回就沒有關係。

希望有道理,有人可以幫忙!

+0

執行值FIELD4通過字段10都來自相同的記錄?或者FIELD4來自記錄#30,FIELD5來自記錄#20000等? – 2011-04-12 23:41:26

+0

@Shannon - 我想我沒有,但它會是首選。 – dscl 2011-04-13 13:03:13

回答

2

喜歡的東西

SELECT field1, 
     field2, 
     field3, 
     field4, 
     .... 
     field10 
    FROM(SELECT field1, 
       field2, 
       ..., 
       field10, 
       rowid rid, 
       min(rowid) OVER (partition by field1, field2, field3) min_rid 
      FROM your_table_name) 
WHERE rid = min_rid 

應該工作。如果有一個主鍵,你可以使用它而不是ROWID,我只是用它來保證是唯一的。

爲了您的弧線球

SELECT field1, 
     field2, 
     field3, 
     field4, 
     .... 
     field10 
    FROM(SELECT field1, 
       field2, 
       (CASE WHEN field3 IS NULL 
        THEN 'NULL' 
        ELSE field3 
       END) field3, 
       ..., 
       field10, 
       rowid rid, 
       min(rowid) OVER (partition by field1, 
              field2, 
              (CASE WHEN field3 IS NULL 
                THEN 'NULL' 
                ELSE field3 
               END) min_rid 
      FROM your_table_name) 
WHERE rid = min_rid 
+0

真棒 - 它需要一段時間才能緊縮,但我將其視爲一個好兆頭。 1曲線球雖然。說field3可以爲空或有一定的價值。當這個值不爲空時,我想對待那些相同的東西。事情到此 案件的效果時,場3爲null,則空 \t別人「X」 結束的字段3, 只是不知道我將如何實現在兩個外選擇和分區。 – dscl 2011-04-13 03:02:01

+0

@dscl - 覆蓋曲線球 – 2011-04-13 03:48:27

+0

謝謝賈斯汀,我自己試了一下,幾乎已經覆蓋了只是'()'的問題。 – dscl 2011-04-13 12:49:35

0

試試這個:

select a.* 
from tblA a, 
    (select min(rowid), col_1, col_2 from tblA 
     group by col_1, col_2) b 
where a.rowid=b.rid;  
相關問題