繁体   English   中英

在db2 sql中对记录进行排名

[英]Rank records in db2 sql

我有2张桌子,如下所示

product1    item1   rank1
1234    XXXX    1
1234    YYYY    2
5678    GGGG    3
5678    HHHH    4

product2    item2   score   rank2
 1234       XXXX    90        1
 1234       ZZZZ    80        2
 1234       YYYY    70        3
 1234       CCCC    60        4
 5678       HHHH    80        1
 5678       GGGG    60        2
 5678       DHDH    50        3
 9800       AAAA    100       1
 4352       BBBB    45        1

我需要更改表2的输出,如下所示:

product2    item2   score   rank2
1234         XXXX   90        1
1234         YYYY   70        2
1234         ZZZZ   80        3
1234         CCCC   60        4
5678         GGGG   60        1
5678         HHHH   80        2
5678         DHDH   50        3
9800         AAAA   100       1
4352         BBBB   45        1

下面的SQL提供以下输出,

SELECT PRODUCT2,LINE2,SCORE,ROWNUMBER() 
OVER (Partition by PRODUCT1 order by A.RANK1 ) RANK
FROM TABLE1 A, TABLE2 B WHERE A.ITEM1= B.ITEM2 AND
A.PRODUCT1 = B.PRODUCT2
UNION ALL
SELECT PRODUCT2,LINE2,SCORE,
ROWNUMBER() OVER (Partition by PRODUCT2 ORDER BY SCORE DESC) RANK
FROM TABLE2 C
WHERE NOT EXISTS (
SELECT * FROM TABLE1 A WHERE A.PRODUCT1 = C.PRODUCT2 
AND A.ITEM1= C.ITEM2)

product2    item2   score   rank2
1234        XXXX     90       1
1234        YYYY     70       2
1234        ZZZZ     80       1
1234        CCCC     60       2
5678        GGGG     60       1
5678        HHHH     80       2
5678        DHDH     50       1 
9800        AAAA     100      1
4352        BBBB     45       1

在比较表2之后,表1中不可用的行没有获得增量等级,而是以1开始而不是获得新的等级。有人可以调查一下并为我提供有关如何实现预期结果的建议在db2中?

输入:

表格1:

Product1 item1 rank1
12345    Xxxx    1
12345    yyyyy   2
12345    Cccc    3
67890    Aaaa    4

表2:

Product2. Item2   score rank2
12345       Bbbb    90      1
12345       yyyyy   80      2
12345       Xxxx    70      3
12345       Cccc    60      4
67890       Aaaa    95      1
67890       Bbbb    85      2
56789       Ghsg    67      1
45377       Hhhh    70       1

预期产量:

Product2.   Item2.   Score.   Rank
12345        Xxxx    70          1
12345        yyyyy   80          2
12345        Cccc    60          3
12345        Bbbb    90          4
67890        Aaaa    95          1
67890        Bbbb    85          2
56789        Ghsq    67          1
45377        Hhhh    70          1

在此处输入图片说明

SELECT PRODUCT2, LINE2, SCORE,
   CASE WHEN A_ITEM1 IS NULL THEN RANK2 ELSE RANK END AS RANK
FROM (
  SELECT PRODUCT2, LINE2, SCORE,
    A.ITEM1 A_ITEM1,
    ROWNUMBER() OVER (Partition by PRODUCT1 order by A.RANK1 AS  RANK,
    ROWNUMBER() OVER (Partition by PRODUCT2 order by B.SCORE AS  RANK2
  FROM TABLE1 B
  LEFT JOIN TABLE1 A ON A.ITEM1 = B.ITEM2 AND A.PRODUCT1 = B.PRODUCT2
) Z

尝试这个 :

with t1 as (
select f1.*, rownumber() over(partition by f1.Product1 order by f1.rank1) rank
from table1 f1
),
t2 as (
select f1.*, rownumber() over(partition by f1.Product2 order by f1.score desc) rank
from table2 f1
)
select t2.Product2, ifnull(t1.item2, t2.item2) item2, t2.score, t2.rank as rank 
from t2 left outer join t1 on t1.Product1=t2.Product2 and t1.rank=t2.rank

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM