首页 > 解决方案 > 根据另一个表中的列名从一个表中选择列

问题描述

我想为 Jasper 报告从下表中选择数据。

AA_COLUMN_NAMES
在此处输入图像描述

AA_PAYMENT_DETAILS
在此处输入图像描述

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 报告中使用该查询,因此上述解决方案不起作用。有谁知道解决方案?

标签: sqlsql-server-2014

解决方案


您必须使用动态 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)

推荐阅读