2013-02-04 229 views
1

我有一個PL/SQL SELECT查詢一樣,刪除重複值

select 
    a.sgm, 
    b.numbr 
from tbl1 a, tbl2 b 
where b.itemId = a.itemId 
    and b.orgId = a.orgId 
    and a.srvCode = 'F' 
    and a.nbrCode <> 1 
    and rownum <= 7 

現在它檢索一樣,

sgm-|-numbr 
----------- 
abc-|-123 
abc-|-678 
abc-|-78 
abc-|-099 
bcd-|-153 
bcd-|-123 
bcd-|-123 

我需要檢索一樣,

sgm-|-numbr 
----------- 
abc-|-123 
bcd-|-153 

即,我需要刪除第一列重複的。即sgm不應該重複。

+0

什麼是你保持numbr列標準是什麼?保持第一個? – sgeddes

+1

爲什麼使用MySQL標籤? – Strawberry

回答

0

由於您使用的是Oracle的最低值,那麼試試這個簡化版本使用CTE

WITH CTE as (
    SELECT sgm, numbr, 
     rownum rn 
    FROM YourTable 
    ) 

SELECT CTE.sgm, CTE.numbr 
FROM CTE 
JOIN (
    SELECT sgm, MIN(rownum) minrn 
    FROM CTE 
    GROUP BY sgm) t ON CTE.sgm = t.sgm AND CTE.rn = t.minrn 

http://sqlfiddle.com/#!4/8d6fb/10

您可以在CTE替代上述查詢。

祝你好運。

+0

但是,讓'股東特別大會,numbr,RN,上海通用,minrn'爲獲取使用組。我們可以只顯示'sgm,numbr'。? – NaaN

+0

沒錯,只是改變選擇*選擇CTE.sgm,CTE.numbr - 更新小提琴:http://sqlfiddle.com/#!4/8d6fb/11 – sgeddes

+0

謝謝..奏效。 :) – NaaN

0
select a.sgm,MAX(b.numbr) 
from tbl1 a, tbl2 b 
where b.itemId = a.itemId 
AND b.orgId= a.orgId 
and a.srvCode= 'F' 
and a.nbrCode <> 1 
and rownum<=7 
group by sgm 

SGM不會重複的值,但數量的最大值將被選中,同樣你也可以選擇使用Min函數

+0

顯示錯誤:不是GROUP BY表達式 – NaaN

+1

您可以通過SGM – Zohaib

0
SELECT a.sgm, MAX(b.numbr) 
FROM tbl1 a INNER JOIN tbl2 b 
    ON a.itemID = b.itemId 
    AND a.orgId = b.orgId 
WHERE a.srvCode= 'F' 
AND a.nbrCode <> 1 
AND rownum <= 7 
GROUP BY a.sgm 

應用上b.numbr你選擇像MAX()的一組功能,並應用分組上a.sgm,這應該做你所需要的。

忠告:做你明確連接,查看查詢和我之間的差異。

0

使用組由功能

從TBL1一個選擇 a.sgm, b.numbr ,TBL2 b 其中b.itemId = a.itemId 和b.orgId = a.orgId 和a.srvCode ='F' 和a.nbrCode <> 1 和rownum < = 7 組由a.sgm