在下面的场景中需要您的帮助。
Table1
Columns
Unique_id number
Name varchar2(20)
desc varchar2(20)
Column_Name varchar2(20) /* Contain Column name of Table2 like Col1, Col2, Col3*/
Table2
Columns
Unique_id number FK from Table1
Col1 varchar2(20)
Col2 varchar2(20)
Col3 varchar2(20)我想编写一个查询以获得以下列。
Name, desc, Column_name, Value值应该来自Table2。所有列(Col1、Col2、Col3)都可以包含数据,或者只有一个列可以包含数据。
需要帮助如何得到它,我使用解码来实现它。在我的实际情况下,大约有200个这样的专栏,有没有其他更好的(表演)方法来解决这个问题。
谢谢你,维杰
发布于 2022-05-09 12:05:13
由于您已经提到,如果Table2中包含值的列超过一个,则结果行也将超过一个。因此,您可以首先使用UNION ALL生成多个行,然后使用表1-
SELECT T1.Name, T1.desc, T1.Column_name, T2.Value
FROM Table1 T1
JOIN (SELECT Unique_id, Col1 Value
FROM Table2
WHERE col1 IS NOT NULL
UNION ALL
SELECT Unique_id, Col2
FROM Table2
WHERE col2 IS NOT NULL
UNION ALL
SELECT Unique_id, Col3
FROM Table2
WHERE col3 IS NOT NULL
... ) T2 -- Repeat this step for how much columns are there in your table.
ON T1.Unique_id = T2.Unique_id;https://stackoverflow.com/questions/72170856
复制相似问题