对另一个表使用SELECT列表中一个表的查询结果



我有两个表:

t1

camp_1 col_1t2 camp_2 col_2

col_1 col_2 col_31 22 4 63 6 94 8 12

我想创建一个语句,在t2的SELECT列表中使用t1的结果,并显示t2的结果。

的例子:

步骤1:从表1中获取结果

select col_name from t1 where campaign_name = 'camp_1'

结果:col_1

步骤2:使用t2的结果(col_1)并显示相应的结果

select col_1 from t2 

最终结果应为

<>前123.4

考虑这样修改模式:

t1(不变)

camp_1 col_1t2 camp_2 col_2

group_name col_name numgroup1 col_1 1组1 col_2 2Group1 col_3Group2 col_1组2 col_2 4Group2 col_3 6Group3 col_1组3 col_2 6Group3 col_3Group4 col_1组4 col_2 8group4 col_3 12

可以选择:

SELECT num
FROM t1
JOIN t2 ON t1. col_name = t2. col_name
WHERE t1.campaign_name = 'camp_1'

好处:

  • SQL-Server可以优化你的查询,这使得它更快
  • 使用单个SQL查询两个表
  • 您可以定义更复杂的语句,通过同时组合两个表的条件

如果不能更改模式,仍然有可能在没有动态SQL的情况下选择值。您可以使用精细化特性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)

上网试试吧!

如果不能将模式更改为>说。然后,首先,必须从表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)

方式二(用于XML PATH):

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.

相关内容

  • 没有找到相关文章

最新更新