Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在MSSQL中将两个select语句组合成一个select语句?_Sql Server_Select - Fatal编程技术网

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

Sql server 如何在MSSQL中将两个select语句组合成一个select语句?,sql-server,select,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

查询:

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语句组合成一个SELECT语句,就像上图一样。我希望它们与列组合,就像图片一样。

尝试此查询

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';                     
从表1A中选择a.a1、a.b2、c.a1、b.a2、b.b2、b.c2
表1任意行表2任意行上的内部联接表2 b

通常,对于类似的事情,您会使用
内部联接。但是,
内部联接
在它联接的两个对象之间需要一些公共列,而您没有这些列。
由于您的查询也不包含
ORDER BY
子句,因此没有可靠的方法将它们联接起来,以便
表1
中的每一行始终联接到
表2
中的同一行
但是,由于两个表都有一个
time
列,因此可以使用该列:

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 

若您并没有任何列要连接,那个么您可以生成行号并连接该行。对业务不太确定,但以下内容在这里适用。如果两个表中的行数不同,请将join更改为required

;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

我们正在讨论SQL基础知识,您的第一次尝试似乎可以奏效,顺便说一句,这里有另一种常见的编写方式:

;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

欢迎来到stackoverflow。请阅读并回答您的问题。表1和表2有什么共同点吗?如果没有,select1和select2是否有order by子句?没有,没有common或order by子句。在这种情况下,从两个表中生成行号并在该行号列上联接。谢谢!!!!!!!!!!!!!!!!!!!!!!!!!嗨,谢谢你的回答。我刚刚上传了这张照片,我想知道我需要把声明放在哪里。谢谢。从我的工作室,最后一个选择部分,选择t1.a1、t1.b1、t1.c1、t2.a2、t2.b2、t2.c2不起作用。红色线条出现在名称下。可以从显示中删除rn列吗?哎呀,我在处理原始查询时不小心删除了别名。编辑我的答案来解决这个问题。非常感谢你,伙计!再一次,我很乐意帮忙:-)还有一个问题,贝利先生,我们为什么要用“;”一开始?没有这个就好了不是吗?
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' ;