【问题标题】:Combine 2 query output in one result set将 2 个查询输出合并到一个结果集中
【发布时间】:2014-07-07 08:19:50
【问题描述】:

我有两个查询输出如下-

Query-1 输出:

一个

B

C

查询 2 输出:

1

2

3

4

5

现在我期待加入这两个输出,这将返回以下输出-

组合输出:

一个 | 1

B | 2

C | 3

空| 4

空| 5

注意:查询 1 和 2 的输出之间没有关系

提前致谢,mkRabbani

【问题讨论】:

  • 语言?自己的努力?

标签: sql sql-server sql-server-2008 tsql join


【解决方案1】:

关系是基于表A和B的值的顺序,所以我们LEFT JOIN将A的结果(包含数字)到B的结果(包含字符)在有序索引上。

DECLARE @a TABLE (col int);
DECLARE @b TABLE (col char(1));
INSERT INTO @a VALUES (1);
INSERT INTO @a VALUES (2);
INSERT INTO @a VALUES (3);
INSERT INTO @a VALUES (4);
INSERT INTO @a VALUES (5);
INSERT INTO @b VALUES ('A');
INSERT INTO @b VALUES ('B');
INSERT INTO @b VALUES ('C');

SELECT B.col, A.col
FROM ( SELECT col, ROW_NUMBER() OVER(ORDER BY col) AS RowNum FROM @a ) AS A
LEFT JOIN ( SELECT col, ROW_NUMBER() OVER(ORDER BY col) AS RowNum FROM @b ) AS B ON A.RowNum = B.RowNum

【讨论】:

  • 使用 LEFT JOIN 不会引导您获得所需的结果。您应该使用 FULL JOIN,因为您不知道 2 个查询中的哪一个会返回最多的行数。
【解决方案2】:

您可以通过使用 Row_Number() 和全外连接来获得所需的结果。

请检查 SQLFiddler,我已在其中复制了所需的结果。

http://sqlfiddle.com/#!3/21009/6/0

【讨论】:

    【解决方案3】:
    Create Table T1 (col1 nVarchar(10))
    Go
    Create Table T2 (col1 nvarchar(10))
    Go
    Insert T1 (col1) Values ('A'), ('B'), ('C')
    Insert T2 (col1) Values ('1'), ('2'), ('3'), ('4'), ('5')
    Go
    
    ;With CTE1 As (
    Select col1,
        Row_Number() Over(Order By Col1) Rn
        From T1
    ), CTE2 As (
        Select col1,
            Row_Number() Over(Order By Col1) Rn
            From T2
        )
        Select CTE1.col1, CTE2.col1 From CTE1 Right Outer Join
                CTE2 On CTE1.Rn = CTE2.Rn
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 2011-01-20
      相关资源
      最近更新 更多