簡體   English   中英

根據SQL Server中一個表中列的值從兩個表中獲取一個新表:

[英]get a new table from two tables based on the columns' values in a table in SQL server:

我需要從SQL Server中的兩個表中獲取一個新表:

tbl1:

id value
1  abc
2  abd
3  dft

tbl2:

num  abc  abd  dft   
1    5     9   0       
2    8     0   7        

如果tbl2中的列不為0,則從tbl1獲取ID,例如:

 num   id
 1     1  (abc <> 0 in tbl2)    
 1     2  (abd <> 0 in tbl2)    
 2     1  (abc <> 0 in tbl2)     
 2     3  (dft <> 0 in tbl2)      

我的SQL查詢:

 select tbl2.num, case when (tbl2.abc != 0 ) then select tbl1.id from tbl1 end as id
 from tbl2, tbl1

但是,這不是我想要的。 我不想使用循環來做到這一點。

謝謝!

我想你想把union all

select num, 1 as id from tbl2 where abc <> 0
union all
select num, 2 as id from tbl2 where abd <> 0
union all
select num, 3 as id from tbl2 where dft <> 0;

如果要從第一個表中提取ID:

select t2.num, t1.id
from tbl2 cross join
     (select id from tbl1 where value = 'abc') t1
where abc <> 0
union all
select num, t1.id
from tbl2 cross join
     (select id from tbl1 where value = 'abd') t1
where abd <> 0
union all
select num, t1.id
from tbl2 cross join
     (select id from tbl1 where value = 'dft') t1
where dft <> 0;

您可以像這樣使用unpivot:

;WITH tbl1 AS (
SELECT * FROM (VALUES 
(1, 'abc'),
(2, 'abd'),
(3, 'dft')) as t1(id, value)
)
,tbl2 AS (
SELECT * FROM (VALUES 
(1, 5, 9, 0),
(2, 8, 0, 7)) as t2(num, abc, abd, dft)
)

--Unpivot the table.
SELECT num, tbl1.id
FROM 
   (SELECT num, 
            CASE WHEN abc != 0 THEN 1 ELSE NULL END as abc,
            CASE WHEN abd != 0 THEN 1 ELSE NULL END as abd,
            CASE WHEN dft != 0 THEN 1 ELSE NULL END as dft
   FROM tbl2) p
UNPIVOT
   (value FOR id IN 
      (abc, abd, dft)
)AS unpvt
LEFT JOIN tbl1 on tbl1.value = unpvt.id

結果:

num         id
----------- -----------
1           1
1           2
2           1
2           3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM