如何在MSSQL中将两个select语句组合成一个select语句?

时间:2018-03-07 07:41:51

标签: sql-server select

select1         select2     
a1  b1  c1      a2  b2  c2 (column name)
34  64  65      45  67  54
34  43  65      74  75  54
63  54  45      546 76  46


    combined                    
    a1  b1  c1  a2  b2  c2
    34  64  65  45  67  54
    34  43  65  74  75  54
    635 54  45  54  76  46

查询:

SELECT t1.a1, t1.b1, t1.c1, t2.a2, t2.b2, t2.c2                     
FROM table1 t1, table2 t2                       
WHERE t1.time between '2018-03-05' and '2018-03-06' 
AND t2.time between  '2018-03-05' and '2018-03-06';                     

嗨,我想知道如何将两个SELECT语句组合成一个SELECT语句,就像上面的图片一样。我希望它们与列结合,就像图片一样。

4 个答案:

答案 0 :(得分:0)

尝试此查询

Select a.a1,a.b2,c.a1,b.a2,b.b2 ,b.c2 from table1 a 
inner join table2 b on table1 any row <> table 2 any row 

答案 1 :(得分:0)

通常情况下,你会使用inner join来做类似的事情。但是inner join需要在它加入的两个对象之间使用一些公共列,而你却没有。 由于您的查询也不包含ORDER BY子句,因此没有可靠的方法来加入它们,因此table1中的每一行都将始终连接到table2中的同一行。
但是,由于两个表都有time列,您可以使用:

;WITH CTE1 AS
(
    SELECT  a1, 
            b1, 
            c1,
            ROW_NUMBER() OVER(ORDER BY [time]) AS rn
    FROM Table1
    WHERE time between '2018-03-05' and '2018-03-06'
), CTE2 AS
(
    SELECT  a2, 
            b2, 
            c2,
            ROW_NUMBER() OVER(ORDER BY [time]) AS rn
    FROM Table2
    WHERE time between '2018-03-05' and '2018-03-06'
)

SELECT t1.a1, t1.b1, t1.c1, t2.a2, t2.b2, t2.c2                     
FROM cte1 as t1
INNER JOIN cte2 as t2 ON t1.rn = t2.rn

答案 2 :(得分:0)

如果您没有任何要加入的列,则可以生成行号并加入其中。对业务不太确定,但下面将在这里工作。如果两个表中的行数不同,则将join更改为required。

;WITH CTE AS
(
    SELECT * , ROW_NUMBER() OVER(ORDER BY yourOrderbyColumn) rnk
    from table1
)
,CTE1 AS
(
    SELECT * , ROW_NUMBER() OVER(ORDER BY yourOrderbyColumn) rnk
    from table2
)
SELECT * FROM CTE a 
INNER JOIN CTE1 b ON a.rnk = b.rnk

答案 3 :(得分:0)

我们正在谈论SQL基础知识,它看起来你的第一次尝试可以工作,顺便说一下,这是你可以写的另一种常见风格:

SELECT  t1.a1,
        t1.b1,
        t1.c1,
        t2.a2,
        t2.b2,
        t2.c2                     
FROM table1 t1
inner join table2 t2 on t2.time = t1.time
WHERE t1.time between '2018-03-05' and '2018-03-06' ;