(Oracle)如何在具有水平和垂直坐标的表中选择数据?
我的目标是制作一个函数,用垂直和水平坐标选择Tableau中的数据。如何制作我的功能体? 函数应该根据函数参数I_HORIZENT动态选择列,我不知道如何处理该参数 例如,如果垂直坐标为“E1”,而水平坐标为“RP” 然后函数应返回“12”。垂直坐标是一列K1。 水平坐标是列NUM=0的一行(Oracle)如何在具有水平和垂直坐标的表中选择数据?,oracle,function,select,row,Oracle,Function,Select,Row,我的目标是制作一个函数,用垂直和水平坐标选择Tableau中的数据。如何制作我的功能体? 函数应该根据函数参数I_HORIZENT动态选择列,我不知道如何处理该参数 例如,如果垂直坐标为“E1”,而水平坐标为“RP” 然后函数应返回“12”。垂直坐标是一列K1。 水平坐标是列NUM=0的一行 NUM K1 K2 K3 K4 --- --- ---- ---- ---- 0 RK RP RN 1 E1 10 12 11
NUM K1 K2 K3 K4
--- --- ---- ---- ----
0 RK RP RN
1 E1 10 12 11
2 E2 21 23 19
表和我的函数如下所示
CREATE TABLE DATAA (
NUM VARCHAR2(15),
K1 VARCHAR2(15),
K2 VARCHAR2(15),
K3 VARCHAR2(15),
K4 VARCHAR2(15)
);
INSERT INTO DATAA VALUES('0',NULL,'RK','RP','RN');
INSERT INTO DATAA VALUES('1','E1','10','12','11');
INSERT INTO DATAA VALUES('2','E2','21','23','19');
SELECT * FROM DATAA;
CREATE OR REPLACE FUNCTION MYFUN
(
I_VERTICAL IN VARCHAR2.
I_HORIZENT IN VARCHAR2
)RETURN VARCHAR2 AS V_VALUE VARCHAR2;
BEGIN
---
? --How to make my function body?
---
RETURN V_VALUE;
END;
对此,您不需要动态SQL;您可以使用UNPIVOT: 使用unpivoted num、col_名称、col_索引、值作为 挑选* 来自DATAA K2为2,K3为3,K4为4时col_索引的UNPIVOT值 选择r.value 从SELECT*FROM unpivoted,其中value='RP'和num='0'c 内连接 从未插入的字段中选择*,其中col_name='E1'r 关于r.col_索引=c.col_索引 产出: 及 从DUAL中选择MYFUN'E1'、'RP'; 产出: 小提琴 | VALUE | | :---- | | 12 | | MYFUN('E1','RP') | | :--------------- | | 12 |