2013-02-04 173 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