[英]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.