在SQL Server 2000中为两个不同的表选择两列

在SQL Server 2000中为两个不同的表选择两列

问题描述:

我有一个包含两个表(Table1和Table2)的数据库。表1有一列ColumnA和表2有一列ColumnB我想选择两个列,在SQL Server 2000中为两个不同的表选择两列

寻找类似:在表1

ColumnA:

一个

b

c

表2中的列A:

d

Ë

˚F

结果集应该是:

一个d

全称

预先感谢..

+0

是有之间的实际关系这两张桌子?即他们是否设置了主键和外键? – DForck42 2009-12-04 21:15:11

我敢肯定,SQL Server 2000支持表瓦尔所以你可以试试这个

DECLARE @TableA TABLE(
     ID INT IDENTITY(1,1), 
     Val VARCHAR(50) 
) 

INSERT INTO @TableA (Val) SELECT ColumnA FROM Table1 

DECLARE @TableB TABLE(
     ID INT IDENTITY(1,1), 
     Val VARCHAR(50) 
) 

INSERT INTO @TableB (Val) SELECT ColumnB FROM Table2 

SELECT a.Val, 
     b.Val 
FROM @TableA a INNER JOIN 
     @TableB b ON a.ID = b.ID 
+1

谢谢你的回复。上面的逻辑完全适用于我的案例。 – BABA 2009-12-07 12:40:44

+0

非常好的逻辑。它帮助了我。谢谢。 – Raaghav 2013-07-05 08:47:27

由于两个表之间没有关系,所以此操作没有真正定义。 table1中的哪一行与table2中的哪一行一致?

你应该建立一个关系。

无论如何你想实现什么?

+0

我传递两个参数sp都是逗号saperated字符串.. 然后在sp中将字符串转换为两列..这些列必须与另一个表进行更新。 – BABA 2009-12-04 14:59:12

我不知道大图片,但是从你所说的,这里有一个例子。必须有某种方法来定义表1中的哪条记录应该与表2中的记录相匹配。我假设它们在按每个表中的列排序时的排序上匹配(例如,表1中的记录1由列A与列B中排序的表2中的记录1匹配)。这个例子需要SQL 2005或更高版本。

DECLARE @T1 TABLE (A varchar(10)) 
DECLARE @T2 TABLE (B varchar(10)) 

INSERT @T1 VALUES ('a') 
INSERT @T1 VALUES ('b') 
INSERT @T1 VALUES ('c') 
INSERT @T2 VALUES ('d') 
INSERT @T2 VALUES ('e') 
INSERT @T2 VALUES ('f') 

SELECT A, B 
FROM 
(
    SELECT ROW_NUMBER() OVER (ORDER BY A ASC) AS RowNo, A 
    FROM @T1 
) t1 
JOIN 
(
    SELECT ROW_NUMBER() OVER (ORDER BY B ASC) AS RowNo, B 
    FROM @T2 
) t2 ON t1.RowNo = t2.RowNo 
+0

这正是我要发布的内容。 – DForck42 2009-12-04 21:14:30

系统如何知道将table1的'a'值与表2的'd'值相关联?如果有人又增加了一行值 'C',以表2如果您的查询现在输出

null- c 
    a - d 
    b - e 
    c - f 

a - c 
    b - d 
    c - e 

a - c 
    b - d 
    c - e 
null- f 

??? ---您必须以某种方式指定使用哪些规则将table1中的行与table2中的行相关联。

如果你只是想基于字母排序相关的行, 那么如果值在每个表中唯一的,(只使用标准SQL),试试这个

Select Z1.ColumnA, z2.ColumnB 
    From (Select ColumnA, 
       (Select Count(*) 
       From Table1 
       Where ColumnA < t1.ColumnA) RowNo, 
      From Table1 T1) z1 
    Join (Select ColumnB, 
       (Select Count(*) 
       From Table2 
       Where ColumnB < t2.ColumnB) RowNo, 
      From Table2 T2) z2 
     On z1.RowNo = z2.RowNo 
    Order By z1.RowNo