我不能使用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 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
我该怎么做? UNION,JOIN还是其他什么?或许我不能。
我现在能得到的只有:
a,1
a,2
a,3
a,4
b,1
b,2
...
答案 0 :(得分:0)
如果你想纯粹根据行出现的顺序将两个表连接在一起,那么我希望你的数据库支持分析(窗口)函数:
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(),因为它已经有合适的数据要加入;你只是在另一个表中发明了一个增量nubmers的假列,然后再加入
实际上,即使它不支持分析,也有很多方法可以进行行编号,例如使用id < id
和COUNT(*) .. GROUP BY id
将表连接回自身来对行进行编号。我讨厌这样做,但如果你的数据库不支持ROW_NUMBER我会发布一个例子......:/
当然,请记住,RDBMS在名称中有R为一个原因 - 相关数据是......嗯..相关。当数据不相关时,他们不能做得很好,所以如果你希望加入&#34;粉笔&#34;桌子到&#34;奶酪&#34;即使这两者完全不相关,你现在也要找出为什么它的努力工作! :)
答案 1 :(得分:0)
尝试使用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 @tableChar
答案 2 :(得分:-1)
您可以使用row_number()来实现此目的,
select a,row_number() over(order by a) as b from element_type;
由于您没有从其他表中获取第二部分,因此您不需要使用join。但是如果您在不同的表格上执行此操作,则可以使用 row_number()为表格和基础创建键,您可以加入。
希望它会有所帮助。