使用ROW_NUMBER()解析功能,你可以實現它。但是,您需要使用子查詢來完成此操作。但你總是可以用WITH從句來看它的不同。
以下查詢會提示您輸入列a
的值,然後返回列的最大值爲c
的行。 WITH子句的第一部分僅用於構建用於演示的示例數據,您只需要第二部分,即t
。
例如,
爲a
爲26
輸入值:
SQL> WITH data AS
2 (SELECT 26 AS a, 'R' AS b, 4 AS c FROM dual
3 UNION ALL
4 SELECT 26 AS a, 'T' AS b, 5 AS c FROM dual
5 UNION ALL
6 SELECT 26 AS a, 'S' AS b, 2 AS c FROM dual
7 UNION ALL
8 SELECT 25 AS a, 'Y' AS b, 2 AS c FROM dual
9 UNION ALL
10 SELECT 25 AS a, 'U' AS b, 3 AS c FROM dual
11 UNION ALL
12 SELECT 24 AS a, 'X' AS b, 3 AS c FROM dual
13 UNION ALL
14 SELECT 22 AS a, 'Z' AS b, 3 AS c FROM dual
15 UNION ALL
16 SELECT 21 AS a, 'P' AS b, 3 AS c FROM dual
17 ),
18 t AS
19 (SELECT a,b,c,row_number() OVER(PARTITION BY a ORDER BY c DESC) rn FROM DATA
20 )
21 SELECT a,b,c FROM t WHERE a = &1 AND rn = 1;
Enter value for 1: 26
old 21: SELECT a,b,c FROM t WHERE a = &1 AND rn = 1
new 21: SELECT a,b,c FROM t WHERE a = 26 AND rn = 1
A B C
---------- - ----------
26 T 5
爲a
爲25
輸入值:
SQL> WITH data AS
2 (SELECT 26 AS a, 'R' AS b, 4 AS c FROM dual
3 UNION ALL
4 SELECT 26 AS a, 'T' AS b, 5 AS c FROM dual
5 UNION ALL
6 SELECT 26 AS a, 'S' AS b, 2 AS c FROM dual
7 UNION ALL
8 SELECT 25 AS a, 'Y' AS b, 2 AS c FROM dual
9 UNION ALL
10 SELECT 25 AS a, 'U' AS b, 3 AS c FROM dual
11 UNION ALL
12 SELECT 24 AS a, 'X' AS b, 3 AS c FROM dual
13 UNION ALL
14 SELECT 22 AS a, 'Z' AS b, 3 AS c FROM dual
15 UNION ALL
16 SELECT 21 AS a, 'P' AS b, 3 AS c FROM dual
17 ),
18 t AS
19 (SELECT a,b,c,row_number() OVER(PARTITION BY a ORDER BY c DESC) rn FROM DATA
20 )
21 SELECT a,b,c FROM t WHERE a = &1 AND rn = 1;
Enter value for 1: 25
old 21: SELECT a,b,c FROM t WHERE a = &1 AND rn = 1
new 21: SELECT a,b,c FROM t WHERE a = 25 AND rn = 1
A B C
---------- - ----------
25 U 3
您需要使用** CASE **和** ROW_NUMBER **分析函數。在你的問題中,你的意思是** asap **?爲了儘快得到答案,你應該提供一個工作測試用例。創建並插入語句。至少SQL小提琴。顯示數據對誰想幫助你沒有幫助。你在一張桌子上執行一個SQL,所以只看數據的人只能* GUESS *而不能給你完全正確的答案。 –
@LalitKumarB我認爲他希望答案儘快(儘快) - *我認爲這是非常粗魯* –
@RaduGheorghiu我知道。我正在向OP解釋。 –