我不能使用Union,因为它不是我想要的结果,也不能使用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第一个是表的一部分,第二个是手工创建的select,它给出了如下结果:
select a; --Give--> a,b,c,d (1 column)
select b; --Give--> 1,2,3,4 (1 column)我需要一个基于第一个给我的查询(第2列):
a,1
b,2
c,3
d,4我该怎么做?工会,加入还是别的什么?或者我做不到。
我现在所能得到的就是:
a,1
a,2
a,3
a,4
b,1
b,2
...发布于 2017-08-03 13:34:43
如果您想将两个表完全按照行出现的顺序连接在一起,那么我希望您的数据库支持分析(窗口)函数:
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中递增的整数,则不需要在该表上使用ROW_NUMBER() OVER(),因为它已经有合适的数据可供连接;您只需在另一个表中创建一个假的增量器列,然后将其连接在一起即可。
实际上,即使它不支持分析,也有一些很糟糕的行编号方法,比如使用id < id和COUNT(*) .. GROUP BY id将表重新连接到它自己来对行进行编号。我讨厌这样做,但如果您的数据库不支持ROW_NUMBER,我将发布一个示例。:/
当然,请记住,RDBMS的名字中有R,因为相关的数据是.好吧..。相关的。如果你希望把“粉笔”表和“奶酪”表连在一起,即使两者完全不相关,那么你现在就会发现,为什么这是一项艰苦的工作!)
发布于 2017-08-03 13:42:46
尝试使用row_number。我创造了一些能帮你的东西。见下文:
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 @tableCharhttps://stackoverflow.com/questions/45484772
复制相似问题