我得为您解答,我正在尝试合并两个表格,我找不到正确的查询。SQLServer加入两个表格
我有两个表: T1:1column,拥有X记录 T2:1column,拥有ÿ记录 注:Y永远不可能大于X,但它往往比较小的这一个
我要加入这些表为了有一个两列的表 t3:ColumnFromT1,columnFromT2。
当Y小于X时,T2字段值重复并遍布我所有其他值,但是我希望在使用来自T2的所有列时获得NULL。
我怎么能做到这一点? 谢谢
我得为您解答,我正在尝试合并两个表格,我找不到正确的查询。SQLServer加入两个表格
我有两个表: T1:1column,拥有X记录 T2:1column,拥有ÿ记录 注:Y永远不可能大于X,但它往往比较小的这一个
我要加入这些表为了有一个两列的表 t3:ColumnFromT1,columnFromT2。
当Y小于X时,T2字段值重复并遍布我所有其他值,但是我希望在使用来自T2的所有列时获得NULL。
我怎么能做到这一点? 谢谢
你可以给每个表中的行数的子查询。然后你可以在该行号上加入。要从第二个表中回收行,请取第一个表的行号的模数%
。
例子:
select Sub1.col1
, Sub2.col1
from (
select row_number() over (order by col1) as rn
, *
from @T1
) Sub1
left join
(
select row_number() over (order by col1) as rn
, *
from @T2
) Sub2
on (Sub1.rn - 1) % (select count(*) from @T2) + 1 = Sub2.rn
测试数据:
declare @t1 table (col1 int)
declare @t2 table (col1 datetime)
insert @t1 values (1), (2), (3), (4), (5)
insert @t2 values ('2010-01-01'), ('2012-02-02')
此打印:
1 2010-01-01
2 2012-02-02
3 2010-01-01
4 2012-02-02
5 2010-01-01
您正在寻找一个左连接(http://www.w3schools.com/sql/sql_join_left.asp)例如。 T1 LEFT JOIN T2
说,他们都有客户ID列在共同
SELECT *
FROM T1
LEFT JOIN
T2 on t1.CustomerId = T2.CustomerId
这将返回在T1和所有记录的匹配T2与空值的T2值,他们不匹配。
确保您在一个公共列上连接表(如果需要多个列来执行连接,则使用公共列集)。如果没有,你正在做一个笛卡儿连接(http://ezinearticles.com/?What-is-a-Cartesian-Join?&id=3560672)
嗨回来了,谢谢tanging。尽管如此,我无法做到这一点,因为我没有条件,我所要做的就是根据它们的当前顺序绑定这两个表。我每桌只有一列,不能做“ON
谢谢。聪明的想法 – CoolStraw 2010-10-14 12:22:06