从表中删除重复的值

时间:2013-02-04 07:16:55

标签: sql plsql

我有一个PL / SQL选择查询,如

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不应重复。

5 个答案:

答案 0 :(得分: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函数选择最小值

答案 1 :(得分: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中替换您的查询。

祝你好运。

答案 2 :(得分: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

MAX()上应用您选择的群组功能,例如b.numbr,并在a.sgm上应用分组,这应该可以满足您的需求。

建议:明确地进行连接,查看查询与我的查询之间的区别。

答案 3 :(得分:0)

Select a from  tbl a , tbl b WHERE a.userid > b..userid and
a.sgm = b.sgm;

检查这个小提琴http://sqlfiddle.com/#!2/40b8f/2

答案 4 :(得分:0)

按功能分组使用

选择     a.sgm,     b.numbr 来自tbl1 a,tbl2 b 其中b.itemId = a.itemId     和b.orgId = a.orgId     和a.srvCode ='F'     和a.nbrCode&lt;&gt; 1     和rownum&lt; = 7 按a.sgm分组

相关问题