0

假设有两个表A={a,b}和B={0,1,2},可以join

tableA  tableB
a       0
b       1
a       2
        3

如何得到以下结果 ExpectingResult:

tableA  tableB
a-------0
b-------1
null----2
null----3

或者

   tableA   tableB
    a-------2
    b-------3
    null----0
    null----1

只要确保每个表中的元素只出现一次,我尝试了各种join(inner,full,cross),没有一个可以做到。有人可以给我小费吗?

非常感谢你

请检查此问题本身的链接:http ://www.sqlfiddle.com/#!3/9fc21/2

4

2 回答 2

0

一个糟糕的要求。产生这种输出的原因几乎可以忽略不计,尽管我并没有完全排除理智的原因。

对于 SQL Server 2000,您将需要通过临时表来获取用于压缩的顺序密钥。

  SELECT IDENTITY(int,1,1) ID, Value
    INTO #tblA
    FROM tableA
ORDER BY Value;

  SELECT IDENTITY(int,1,1) ID, Value
    INTO #tblB
    FROM tableB
ORDER BY Value;

  SELECT A.Value, B.Value
    FROM #tblA A FULL OUTER JOIN #tblB B ON A.ID = B.ID
ORDER BY Coalesce(A.ID, B.ID);
于 2012-12-04T06:13:40.647 回答
0

使用SQL Server 2005,您可以使用ROW_NUMBER和 a的组合FULL OUTER JOIN来组合两个结果。

请参阅SQL 小提琴

不幸的是,SQL Server 2000它没有ROW_NUMBER函数,所以你有点坚持使用带有标识字段的临时表来模拟行号。

这样做的要点是

  • 从 tableA 中选择您需要的数据到#tempTableA,添加一个标识字段。
  • 对表 B 重复
  • 使用诱惑FULL OUTER JOIN结果
于 2012-12-04T06:14:11.377 回答