我有一个三列的table1和一个单列的table2。
如果第一列的值为Y,那么连接后我需要表2中的特定值作为另一个表中的行;如果第二列为Y,那么我需要表2中的特定值作为第三表中的另一行加入后。两个表中没有公共列。
如果一行中的两列以Y作为值,那么连接后在最终表中需要两行。我现在使用case进行连接,但是只检查了一列。
有人可以帮我吗?
table1
--------------------
col1 col2 col3(pk)
--------------------
y n 123
y y 456
table2
--------------------
col1
--------------------
col1Y
col2Y
预期产量
table1
--------------------
col1 col2
--------------------
123 col1Y
456 col1Y
456 col2Y
答案 0 :(得分:0)
select col3 as col1, 'col1y' as col2 from myTable where col1 = 'y'
union
select col3 as col1, 'col2y' as col2 from myTable where col2 = 'y'
--order by col1, col2;
答案 1 :(得分:0)
您还可以检查如何使用数据透视表命令转置表
答案 2 :(得分:0)
我们可以unpivot
和join
来获得您想要的结果:
declare @table1 table (col1 char(1),col2 char(1),col3 int)
insert into @table1(col1,col2,col3) values
('y','n',123) ,
('y','y',456)
declare @table2 table (col1 char(5))
insert into @table2 (col1) values
('col1Y'),('col2Y')
select
u.col3 as col2,t2.col1 as col2
from
@table1 t1
unpivot
(cval for cname in (col1,col2)) u
cross apply
(select cname + cval as Complete) v
inner join
@table2 t2
on
v.complete = t2.col1
结果:
col1 col2
----------- -----
123 col1Y
456 col1Y
456 col2Y
但是在unpivot
和cross apply
之后,我们根本就没有 table2
(我们可以将其过滤到{{ 1}}是cval
)。但是目前,我已经将它包括进来,以防万一我丢失了一些东西或者在查询中还有更多内容要构建。
答案 3 :(得分:0)