sql - 根据另一个表中的列名从一个表中选择列
问题描述
我想为 Jasper 报告从下表中选择数据。
DDL + DML
CREATE TABLE SLPAYROLL_LIVE.dbo.AA_COLUMN_NAMES(
id int PRIMARY KEY NOT NULL,
name varchar(500) NOT NULL,
active bit
);
INSERT INTO SLPAYROLL_LIVE.dbo.AA_COLUMN_NAMES (id, name, active) VALUES (1, 'col_1', 1);
INSERT INTO SLPAYROLL_LIVE.dbo.AA_COLUMN_NAMES (id, name, active) VALUES (2, 'col_2', 1);
INSERT INTO SLPAYROLL_LIVE.dbo.AA_COLUMN_NAMES (id, name, active) VALUES (3, 'col_3', 1);
INSERT INTO SLPAYROLL_LIVE.dbo.AA_COLUMN_NAMES (id, name, active) VALUES (4, 'col_4', 0);
CREATE TABLE SLPAYROLL_LIVE.dbo.AA_PAYMENT_DETAILS(
id int PRIMARY KEY NOT NULL,
username varchar(500),
col_1 varchar(500),
col_2 varchar(500),
col_3 varchar(500),
col_4 varchar(500)
);
INSERT INTO SLPAYROLL_LIVE.dbo.AA_PAYMENT_DETAILS (id, username, col_1, col_2, col_3, col_4) VALUES (1, 'chathura', '500', '200', '300', '0');
INSERT INTO SLPAYROLL_LIVE.dbo.AA_PAYMENT_DETAILS (id, username, col_1, col_2, col_3, col_4) VALUES (2, 'gihan', '300', '100', '100', '0');
我只想从中选择活动列AA_PAYMENT_DETAILS
。可以从AA_COLUMN_NAMES
表中获取活动列名。
我搜索了我的问题并找到了以下解决方案。
由于我想在 Jasper 报告中使用该查询,因此上述解决方案不起作用。有谁知道解决方案?
解决方案
您必须使用动态 SQL 来执行此操作 - 这是一种相当简单的方法:
DECLARE @SQL nvarchar(4000) = '';
SELECT @SQL = @SQL +', '+ name
FROM dbo.AA_COLUMN_NAMES
WHERE active = 1
SET @SQL = 'SELECT id, username' + @SQL + ' FROM dbo.AA_PAYMENT_DETAILS'
EXEC(@SQL)
推荐阅读
- angular - Angular:使用 Location.go() 后的 router.isActive()
- swift - 警报未显示在正在呈现的模式上
- nreal - 三星 S10 的 NReal 眼镜 - 出现黑屏/“安全策略阻止使用相机”
- graphql - 如果服务器确实返回 html 错误页面而不是 graphql 错误,如何使用 apollo_client 处理错误
- javascript - 在 .filter() 方面需要帮助
- javascript - 为什么简单的处理代码会使浏览器崩溃?
- javascript - Gtag 未记录
- reactjs - 如何使用传递的 state/setState 值定义 props 接口?
- java - JAVA 温度转换
- linux - 即使在终止信号之后,bash 脚本也会以零状态退出