[英]Select columns from a table based on the column names from another table
我想從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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.