Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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组合两个查询结果_Sql_Sql Server_Join - Fatal编程技术网

SQL组合两个查询结果

SQL组合两个查询结果,sql,sql-server,join,Sql,Sql Server,Join,我不能使用联合,因为它不是我想要的结果,我不能使用联合,因为我没有任何公共列。我已经尝试了许多不同的SQL查询结构,但都没有达到我想要的效果 我需要帮助来实现我认为非常简单的SQL查询。我现在做的是 select a, b from (select top 4 a from element_type order by c) as Y, (SELECT * FROM (VALUES (NULL), (1), (2), (3)) AS X(b)) as Z 第一个是表格的一部分,第二

我不能使用联合,因为它不是我想要的结果,我不能使用联合,因为我没有任何公共列。我已经尝试了许多不同的SQL查询结构,但都没有达到我想要的效果

我需要帮助来实现我认为非常简单的SQL查询。我现在做的是

select a, b 
from (select top 4 a from element_type order by c) as Y, 
     (SELECT * FROM (VALUES (NULL), (1), (2), (3)) AS X(b)) as Z
第一个是表格的一部分,第二个是手动创建的选择,其结果如下:

select a; --Give--> a,b,c,d   (1 column)
select b; --Give--> 1,2,3,4   (1 column)
我需要一个基于前两个的查询,这两个查询给我(2列):

我该怎么做?联盟,加入还是其他什么?也许我不能

我现在能得到的只是:

a,1
a,2
a,3
a,4
b,1
b,2
...

如果您希望纯粹按照行的显示顺序将两个表连接在一起,那么我希望您的数据库支持分析(窗口)功能:

 SELECT * FROM
  (SELECT t.*, ROW_NUMBER() OVER(ORDER BY x) as rown FROM table1 t) t1
  INNER JOIN
  (SELECT t.*, ROW_NUMBER() OVER(ORDER BY x) as rown FROM table2 t) t2
  ON t1.rown = t2.rown
本质上,我们发明了一些东西,通过对行进行编号来连接它们。如果您的一个表已经包含了从1开始递增的整数,那么您不需要在该表上的第_NUMBER()行覆盖(),因为它已经有合适的数据可以连接;您只需在另一个表中创建一个伪递增numers列,然后将其连接在一起

实际上,即使它不支持分析,也有一些难看的行编号方法,例如使用
id
COUNT(*)将表连接回自身。。按id分组
对行进行编号。我讨厌这样做,但如果您的DB不支持行号,我将发布一个示例..:/

当然,请记住,RDBMS在名称中有R是有原因的,因为相关数据是。。好相关的当数据不相关时,它们的表现并不好,因此,如果您希望将“粉笔”表加入到“奶酪”表中,即使这两个表完全不相关,您现在就知道了为什么这是一项艰巨的工作!)

您可以使用row_number()来实现这一点

select a,row_number() over(order by a) as b from element_type;
由于您不从其他表中获取第二部分,所以不需要使用join。但是,如果您在不同的表上执行此操作,则可以使用行编号()为表和基于这些键的基创建键,您可以加入


希望能有所帮助。

尝试使用行号。我创造了一些可能对你有帮助的东西。见下文:

declare @tableChar table(letter varchar)

insert into  @tableChar(letter)
select 'a';

insert into  @tableChar(letter)
select 'b';

insert into  @tableChar(letter)
select 'c';

insert into  @tableChar(letter)
select 'd';

select letter,ROW_NUMBER() over(order by letter )  from @tableChar

您尝试在不同的表中选择的列是否相同?或者它们都是同一张表的一部分?Thx的信息我会尽量记住我已经更新了我的评论。正如我在问题中所说的,为糟糕的英语感到抱歉。使用模糊版本的表结构和您试图获得的所需输出更新您的问题可能会更有用。该问题以更好的方式更新(适用于SandPiper的thx),我试图得到的输出就在上面,我认为这里不需要表结构。因为这里的数据类型无关紧要。但是如果你认为你需要它来帮助,我可以试着给你它的完整结构,他的意思是给你两个领域的一些样本数据,并说明它们之间的关系。到目前为止,您遇到的部分问题是,您没有清楚地解释A和B中的值如何相互关联,那么为什么它们在逻辑上应该以所需的结束格式结束?Thx答案正是我想要的我不知道rank()函数,我来看看它到底做了什么。欢迎,还有另一个函数,如rank(),dense_rank()。。。对于其他组合,我是-1,这是因为您说过“可以使用秩来创建键…”,但是键通常是唯一的,并且秩的输出对于给定的行集合不保证是唯一的。。除此之外,post还可以,但不要使用RANK()创建键,以便将此表数据连接到其他表*,除非您对已经存在的唯一值集使用RANK。然而,这最终只是一个微不足道的任务。即使海盗的答案已经对我想做的事情起到了作用,我会稍后测试你的解决方案,我相信它会在其他问题上对我有所帮助。Thx的帮助。小心使用RANK(),因为如果两行的值相同,它就不会计算在内。。i、 e.a、b、b、c的等级为1、2、2、4,它们的密度等级为1、2、2、3。ROW_NUMBER()将只对行1、2、3、4进行编号,还@maxenbovier-Lapierre,这似乎是一个Oracle解决方案。如果您使用的是另一个数据库,则可能没有这些功能可用。这就是为什么用你正在使用的数据库标记你的问题很重要的原因。
declare @tableChar table(letter varchar)

insert into  @tableChar(letter)
select 'a';

insert into  @tableChar(letter)
select 'b';

insert into  @tableChar(letter)
select 'c';

insert into  @tableChar(letter)
select 'd';

select letter,ROW_NUMBER() over(order by letter )  from @tableChar