[英]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.