这是我的架构的简化版本。使用Sql Server 2012企业版。
CREATE table #abc (a INT , b INT);
CREATE TABLE #def ( a INT , c INT ,d INT);
INSERT INTO #abc values(1,23),(1,24);
INSERT INTO #def VALUES(1,53,54),(1,56,57)
表#abc加入#def ON COLUMN a
基本上它是基于列a的两个表的行的串联。尝试内部联接\交叉应用但它们都可以理解地导致交叉连接类型的结果集。我有使用另一个临时表(然后更新)的解决方法,但有点觉得这可以在单个选择中轻松完成。我在这里缺少一些简单的东西。
需要这样的输出:
a b c d
1 23 53 54
1 24 56 57
感谢
-N
答案 0 :(得分:0)
您需要在每一行中都有一个唯一的键值才能以您希望的方式连接表。然后,内部联接将返回您需要的结果集。
如果在表之间引入参照完整性,则会强制执行此操作并返回预期结果。
答案 1 :(得分:0)
您需要某种序列号来将表连接在一起。您可以使用row_number()
生成一个,如下所示:
select a.a, a.b, d.c, d.d
from (select a.*, row_number() over (order by (select NULL)) as seqnum
from #abc a
) a join
(select d.*, row_number() over (order by (select NULL)) as seqnum
from #def d
) d
on a.seqnum = d.seqnum;
现在谨慎,谨慎,谨慎。 order by
子句并没有真正指定顺序,因此序列号可能不是您所期望的。你应该有一个列来指定排序。