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

関数ごとにグループを使用する

tbl1 a、tbl2 b から a.sgm、b.numbr を選択します。b.itemId = a.itemId および b.orgId = a.orgId および a.srvCode = 'F' および a.nbrCode <> 1 および rownum <= 7 a.sgm でグループ化

于 2013-02-04T07:57:13.927 に答える
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, 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
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 に答える