将一个表中的数据合并到第二个表中

时间:2018-05-16 13:46:39

标签: sql sql-server

问题: 我有两个表,Table1有3列[CODE],[CAT],[GROUP]并基于第2列和第2列中的值。 3我想在表2中创建条目。

表2有2列[CODE]和[ALTERNATECODE] - 另请注意Table2在开始时没有数据。

对于Table1中的每个条目(仅当匹配条目超过1个时)我想在table2中为每个匹配的大小写创建一个条目,table2.CODE = table1.code,Table2.alternatecode = Table1.code on匹配条目(条目)。对table1.CAT和Table1.GROUP进行了修改,所有匹配的条目必须将所有其他匹配条目作为表2中的ALTERNATECODES。

SQL:

数据 - 表1:

28644   138 10
27817   138 10
8019    138 11
8018    138 11
21044   138 12
20985   138 12
20986   138 12
10166   138 12
10165   138 12
8056    138 15
11611   139 1
21999   139 1
27497   139 1
11612   139 2
30245   139 3
84409   139 4
26023   139 4
22000   139 5

更新后 - 数据表2:

28644   27817
27817   28644
8019    8018
8018    8019
21044   20985
21044   20986
21044   10166
21044   10165
20985   21044
20985   20986
20985   10166
20985   10165
20986   21044
20986   20985
20986   10166
20986   10165
10166   21044
10166   20985
10166   20986
10166   10165
10165   21044
10165   20985
10165   20986
10165   10166
11611   21999
11611   27497
21999   11611
21999   27497
27497   21999
27497   11611
84409   26023
26023   84409

所以基本上是匹配标准的结果。 表1中的1个条目表示表2中的0个条目, 表1中的2个条目表示我们在table2中有2个条目 表1中的3个条目表示我们在table2中有6个条目

3 个答案:

答案 0 :(得分:2)

我希望我理解正确。听起来你想要使用不相等的代码自我加入类别和组。

public class TestPara {

    public static void main(String[] args) throws InterruptedException {
        Counter counter = new Counter();
        AdderCounter ac = new AdderCounter(counter);
        SubberCounter sc = new SubberCounter(counter);

        Thread t1 = new Thread(ac);
        Thread t2 = new Thread(sc);

        t1.start();
        t2.start();

        t1.join();
        t2.join();

        System.out.println(counter.c);
    }   
}

class AdderCounter implements Runnable{
    Counter counter;

    public AdderCounter(Counter counter) {
        this.counter = counter;
    }

    @Override
    public void run() {
        counter.increment();
        System.out.println(counter.value());
    }
}

class SubberCounter implements Runnable{
    Counter counter;

    public SubberCounter(Counter counter) {
        this.counter = counter;
    }

    @Override
    public void run() {
        counter.decrement();
        System.out.println(counter.value());
    }
 }

答案 1 :(得分:1)

我认为你需要一个简单的插入,具有直接和反向的关系。

;WITH Relationships AS
(
    SELECT
        Code = T.Code,
        AlternateCode = N.Code
    FROM
        Table1 AS T
        INNER JOIN Table1 AS N ON 
            T.Cat = N.Cat AND
            T.[Group] = N.[Group]
    WHERE
        T.Code <> N.Code
)
INSERT INTO Table2 (
    Code,
    AlternateCode)
SELECT
    Code = D.Code,
    AlternateCode = D.AlternateCode
FROM
    Relationships AS D
UNION
SELECT
    Code = D.AlternateCode,
    AlternateCode = D.Code
FROM
    Relationships AS D

答案 2 :(得分:1)

不太清楚你在这里想做什么。也许是这样的?

select t1.Code
    , t1.Cat
from SomeTable t1
join SomeTable t2 on t1.Code = t2.Code 
    and t1.Group = t2.Group
    and t1.Cat <> t2.Cat