SQL加入序列号

时间:2014-08-15 17:32:51

标签: sql sql-server-2008 join

我有2张桌子(A,B)。它们各自具有不同的列,基本上是订单或序列号。表A具有序列'并且值的范围从0到5.表B具有'索引'值为16740,16744,16759,16828,16838和16990.不幸的是,我不知道这些值的重要性。但我确实相信它们将始终按顺序匹配。我想在这些数字上加入这些数字,其中0 = 16740,1 = 16744等。任何想法?

由于

3 个答案:

答案 0 :(得分:2)

您可以使用case表达式将表格a的值转换为表格b的值(或反之亦然)并加入其中:

SELECT *
FROM   a
JOIN   b ON a.[sequence] = CASE b.[index] WHEN 16740 THEN 0 
                                          WHEN 16744 THEN 1
                                          WHEN 16759 THEN 2
                                          WHEN 16828 THEN 3
                                          WHEN 16838 THEN 4
                                          WHEN 16990 THEN 5
                                          ELSE NULL
                            END;

答案 1 :(得分:2)

@Mureinik有一个很好的例子。如果你在路上最后添加更多数字,可能会把这些信息放到新表中是个好主意。

CREATE TABLE C(
AInfo    INT,
BInfo    INT
)
INSERT INTO TABLE C(AInfo,BInfo) VALUES(0,16740)
INSERT INTO TABLE C(AInfo,BInfo) VALUES(1,16744)
etc

然后你可以加入所有表格。

答案 2 :(得分:0)

如果值按照您的示例按升序排列,则可以使用ROW_NUMBER()函数来实现此目的:

;with cte AS (SELECT *, ROW_NUMBER() OVER(ORDER BY [Index])-1 RN
              FROM B)
SELECT *
FROM cte