[英]Using query results from one table in the SELECT list for another table
我有 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
我想创建一个语句来使用t2
的 SELECT 列表中的t1
结果并显示t2
结果。
例子:
步骤 1:从表 1 中获取结果
select col_name from t1 where campaign_name = 'camp_1'
结果: col_1
第 2 步:将结果 ( col_1
) 用于 t2 并显示相应的结果
select col_1 from t2
最终结果应该是
1 2 3 4
考虑将您的架构更改为以下内容:
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
然后您可以 select:
SELECT num
FROM t1
JOIN t2 ON t1. col_name = t2. col_name
WHERE t1.campaign_name = 'camp_1'
好处:
如果您无法更改架构,则仍有可能在没有动态 SQL 的情况下更改 select 值。 您可以使用详尽的功能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'
使用此 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)
如果你不能像slartidan所说的那样改变你的架构。 然后,首先,您必须从表t1中获取所需的列名。
方式一(使用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)
方式二(使用 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,'')
然后你必须执行一个原始的 SQL。
EXEC ('SELECT ' + @Columns + ' FROM t2')
希望,然后您可以从所需的表t2中获取动态列值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.