我有一个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
不应重复。
答案 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;
答案 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分组