1

我有一个 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不应该重复。

4

5 回答 5

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 的值不会重复,但是会选择 number 的最大值,同样你也可以使用 Min 函数选择最小值

于 2013-02-04T07:18:36.653 回答
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 中替换您的查询。

祝你好运。

于 2013-02-04T07:24:20.123 回答
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()on b.numbr,并应用分组 on a.sgm,这应该可以满足您的需求。

建议:明确地加入,看看你的查询和我的查询之间的区别。

于 2013-02-04T07:31:01.573 回答
0
Select a from  tbl a , tbl b WHERE a.userid > b..userid and
a.sgm = b.sgm;

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

于 2013-02-04T07:41:49.063 回答
0

按功能使用分组

从 tbl1 a, tbl2 b 中选择 a.sgm, b.numbr 其中 b.itemId = a.itemId and b.orgId = a.orgId and a.srvCode = 'F' and a.nbrCode <> 1 and rownum <= 7按 a.sgm 分组

于 2013-02-04T07:57:13.927 回答