我有这个表结构
CLIENT_ID | QTY_A | QTY_B | QTY_C | QTY_D | QTY_E
====================================================
1 | 20| 21| 19| NULL| 30
----------------------------------------------------
2 | 45| NULL| 31| 80| 54
----------------------------------------------------
我正在尝试为wate CLIENT_ID计算第一,第二和第三大值。
我怎样才能做到这一点?分析功能在这里帮不了我吧?我不能只按一栏排序。
提前致谢。
答案 0 :(得分:0)
使用UNPIVOT
将列转换为行,然后使用ROW_NUMBER
分析函数对行进行编号:
SELECT client_id,
type,
quantity
FROM (
SELECT client_id,
type,
quantity,
ROW_NUMBER() OVER ( PARTITION BY client_id ORDER BY quantity DESC ) AS rn
FROM table_name
UNPIVOT ( quantity FOR type IN ( qty_a, qty_b, qty_c, qty_d, qty_e ) )
)
WHERE rn <= 3