Select Oracle 中的可配置列名称 SQL
Select configurable column names in Oracle SQL
我有一个 table,其中包含可配置的列名,我可以这样查询:
SELECT
column_name
FROM
my_config
WHERE
condition = 'MY_CONFIG_COLUMNS'
这就是 'my_config' tables 的样子。
COLUMN_NAME CONDITION
----------------------------------
COLUMN1 MY_CONFIG_COLUMNS
COLUMN2 MY_CONFIG_COLUMNS
COLUMN3 NOT_MY_CONFIG_COLUMNS
COLUMN4 NOT_MY_CONFIG_COLUMNS
我的另一个 table 看起来像这样:
ID COLUMN1 COLUMN2 COLUMN3 COLUMN4
ID1 X X
ID2 X X X X
ID3 X X
但是,我会 select 只查找那些 returns 上面的查询在我的其他 table 中的那些列,有点像下面这样:
SELECT
the_columns_in_the config
FROM
my_other_table;
我怎样才能做到这一点?
预期结果:
COLUMN1 COLUMN2
---------------
X
X X
X
这将是这两个表之间的连接(至少,我是这样理解这个问题的;如果您发布示例数据和期望的结果会有所帮助)。
select a.column_name
from my_config a join my_other_table b on b.the_column_in_the_config = a.column_name
where a.condition = 'MY_CONFIG_COLUMNS';
您将需要对列列表进行动态查询。它可以是这样的:
DECLARE
l_column_list VARCHAR2(200);
l_query VARCHAR2(300);
BEGIN
SELECT listagg(column_name,',') WITHIN GROUP (ORDER BY column_name)
INTO l_column_list
FROM my_config
WHERE condition = 'MY_CONFIG_COLUMNS';
l_query := 'SELECT '||l_column_list||' FROM my_other_table';
EXECUTE IMMEDIATE l_query;
--do whatever you ant with the results
END;
/
我有一个 table,其中包含可配置的列名,我可以这样查询:
SELECT
column_name
FROM
my_config
WHERE
condition = 'MY_CONFIG_COLUMNS'
这就是 'my_config' tables 的样子。
COLUMN_NAME CONDITION
----------------------------------
COLUMN1 MY_CONFIG_COLUMNS
COLUMN2 MY_CONFIG_COLUMNS
COLUMN3 NOT_MY_CONFIG_COLUMNS
COLUMN4 NOT_MY_CONFIG_COLUMNS
我的另一个 table 看起来像这样:
ID COLUMN1 COLUMN2 COLUMN3 COLUMN4
ID1 X X
ID2 X X X X
ID3 X X
但是,我会 select 只查找那些 returns 上面的查询在我的其他 table 中的那些列,有点像下面这样:
SELECT
the_columns_in_the config
FROM
my_other_table;
我怎样才能做到这一点?
预期结果:
COLUMN1 COLUMN2
---------------
X
X X
X
这将是这两个表之间的连接(至少,我是这样理解这个问题的;如果您发布示例数据和期望的结果会有所帮助)。
select a.column_name
from my_config a join my_other_table b on b.the_column_in_the_config = a.column_name
where a.condition = 'MY_CONFIG_COLUMNS';
您将需要对列列表进行动态查询。它可以是这样的:
DECLARE
l_column_list VARCHAR2(200);
l_query VARCHAR2(300);
BEGIN
SELECT listagg(column_name,',') WITHIN GROUP (ORDER BY column_name)
INTO l_column_list
FROM my_config
WHERE condition = 'MY_CONFIG_COLUMNS';
l_query := 'SELECT '||l_column_list||' FROM my_other_table';
EXECUTE IMMEDIATE l_query;
--do whatever you ant with the results
END;
/