2017-04-12 139 views
2

組的第一行我有一個表格式如下:選擇與標準

FieldA FieldB FieldC 
1111  ABC  X 
1111  DEF  Y 
1111  GHI  X 
2222  JKL  Y 
2222  MNO  X 
3333  PQR  U 
3333  STT  U 

我要選擇每FIELDA一個FieldB有偏好的X在FieldC(如果沒有X,選擇另外一個)。

我已經嘗試使用RANK函數與PARTITION BY,但我覺得它太不一致了,我現在已經到達了一堵牆。

我的輸出應該是這樣的:

FieldA FieldB FieldC 
    1111  ABC  X 
    2222  MNO  X 
    3333  PQR  U 

查詢:

Select 
rank() over (partition by Field3 order by Field1), 
Field,1 Field2, Field3 
FROM table 
ORDER BY Field1, Field3 

我猜我需要把一個子查詢內部的查詢......

+0

如果你有2個'X',你應該得到他們兩個嗎?如果沒有,那麼優先考慮哪些價值呢? –

+0

你可以發佈你試過的查詢嗎? – Tricky12

回答

2

您可以使用這樣的ROW_NUMBER

SELECT FieldA, FieldB, FieldC 
FROM (
    SELECT FieldA, FieldB, FieldC, 
      ROW_NUMBER() OVER (PARTITION BY FieldA 
          ORDER BY CASE 
             WHEN FieldC = 'X' THEN 1 
             ELSE 2 
             END, 
             FieldB) AS rn 
    FROM mytable) AS t 
WHERE t.rn = 1 

以上查詢從每個FieldA分區中選擇一條記錄。它優先處理所有其他記錄上有FieldC = 'X'的記錄。

+0

絕對的輝煌! – nickfrenchy