gpt4 book ai didi

sql - 根据另一个表中的列名从一个表中选择列

转载 作者:行者123 更新时间:2023-12-05 01:07:26 25 4
gpt4 key购买 nike

我有 2 个表,一个包含我需要的最终结果,另一个包含我需要根据设置级别从中选择的列列表。

例如 :

table_levels

level | name | [selected-columns]
1 | startdate | start_date
1 | end date | end_date
1 | contract | contract

所以如果我做以下
select column from table_levels where level = '1'

然后基本上我需要使用这个 select 语句中的列名来确定从另一个语句中选择了哪些列。

这是我尝试过的,当然我知道这是错误的,但让您了解我正在尝试做什么。
select (select [selected-columns] from table_levels where nwlevel = '1')
from table_results

在某种程度上,我试图动态构建一个 sql 查询,该查询可以被我放入 table_levels 中的任何列更改。 table 。

这在理论上应该与以下 sql 查询相同
select start_date, end_date, contract
from table_results

最佳答案

我之前的回答是针对 mysql 的。由于此后该问题的标签已更新,因此这里是 sql-server-2008 的查询.

table_levels 中的值构建一个列列表, 删除最后一个 , , 构建一个查询字符串以获取来自 table_results 的结果,然后执行。

DECLARE @listStr varchar(MAX) = ( select selectColumnName + ',' from table_levels where level = 1 for xml path(''))
DECLARE @query varchar(MAX) = 'SELECT ' + LEFT(@listStr, LEN(@listStr)-1) + ' FROM table_results'
execute(@query)

Demo for sql server

上一个答案。适用于 mssql
demo for mysql

使用 GROUP_CONCATtable_levels 中的值制作一个字符串然后构建一个查询字符串以获取来自 table_results 的结果
SET @listStr = ( SELECT GROUP_CONCAT(selectColumnName) FROM table_levels where level = 1);
SET @query := CONCAT('SELECT ', @listStr, ' FROM table_results');
PREPARE STMT FROM @query;
EXECUTE STMT;

关于sql - 根据另一个表中的列名从一个表中选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18702203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com