[英]Using query results from one table in the SELECT list for another table
I have 2 tables:我有 2 张桌子:
campaign_name col_name camp_1 col_1 camp_2 col_2
col_1 col_2 col_3 1 2 3 2 4 6 3 6 9 4 8 12
I want to create a statement to use results from t1
in the SELECT list for t2
and show t2
results.我想创建一个语句来使用
t2
的 SELECT 列表中的t1
结果并显示t2
结果。
Example:例子:
Step 1: get results from table 1步骤 1:从表 1 中获取结果
select col_name from t1 where campaign_name = 'camp_1'
Result: col_1
结果:
col_1
Step 2: Use the result ( col_1
) for t2 and show the corresponding results第 2 步:将结果 (
col_1
) 用于 t2 并显示相应的结果
select col_1 from t2
The end results should be最终结果应该是
1 2 3 4
Consider to change your schema to something like this:考虑将您的架构更改为以下内容:
campaign_name col_name camp_1 col_1 camp_2 col_2
group_name col_name num group1 col_1 1 group1 col_2 2 group1 col_3 3 group2 col_1 2 group2 col_2 4 group2 col_3 6 group3 col_1 3 group3 col_2 6 group3 col_3 9 group4 col_1 4 group4 col_2 8 group4 col_3 12
You can then select:然后您可以 select:
SELECT num
FROM t1
JOIN t2 ON t1. col_name = t2. col_name
WHERE t1.campaign_name = 'camp_1'
Benefits:好处:
If you cannot change your schema, there is still a possibility to select the values without dynamic SQL.如果您无法更改架构,则仍有可能在没有动态 SQL 的情况下更改 select 值。 You can use the elaboratet feature
UNPIVOT
- which converts data from several columns into data in additional rows.您可以使用详尽的功能
UNPIVOT
- 将多列中的数据转换为其他行中的数据。
WITH unpivot_t2 AS (
SELECT *
FROM t2
UNPIVOT
(value FOR col_name IN (col_1, col_2, col_3))
AS unpvt
)
SELECT value
FROM unpivot_t2
JOIN t1 ON t1.col_name = unpivot_t2.col_name
WHERE campaign_name = 'camp_1'
With this DDL:使用此 DDL:
CREATE TABLE t1 (
campaign_name varchar(255),
col_name varchar(255)
)
INSERT INTO t1 VALUES
('camp_1', 'col_1'),
('camp_2', 'col_2')
CREATE TABLE t2 (
col_1 varchar(255),
col_2 varchar(255),
col_3 varchar(255)
)
INSERT INTO t2 VALUES
(1,2,3),
(2,4,6),
(3,6,9),
(4,8,12)
If you cannot change your schema as slartidan said.如果你不能像slartidan所说的那样改变你的架构。 Then, first, you have to get your required column name(s) from the table, t1 .
然后,首先,您必须从表t1中获取所需的列名。
Way One (Using SQL Concatenation)方式一(使用SQL串联)
DECLARE @Columns VARCHAR(MAX) = ''
SELECT @Columns = @Columns + col_name + ','
FROM t1
WHERE campaign_name = 'camp_1'
GROUP BY col_name
SET @Columns = LEFT(@Columns,LEN(@Columns)-1)
Way Two (Using FOR XML PATH):方式二(使用 FOR XML 路径):
DECLARE @Columns VARCHAR(MAX) = ''
SELECT @Columns = STUFF((SELECT ',' + col_name
FROM t1
WHERE campaign_name = 'camp_1'
GROUP BY col_name
FOR XML PATH('')) ,1,1,'')
Then you have to execute a raw SQL.然后你必须执行一个原始的 SQL。
EXEC ('SELECT ' + @Columns + ' FROM t2')
Hope, Then you can get dynamic column values from your desired table, t2 .希望,然后您可以从所需的表t2中获取动态列值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.