将数据从另一 table 的一列插入到相同 table 的多列中
Inserting data into multiple columns of same table from one column of another table
我有一个 table WCR (l,j,W,C,R)
,其中包含以下条目。这里,l,j
是主键。
我必须将 WCR
的 C
列中的数据插入到另一个 table C(l,C1,C2)
中,其中 l
是主键。 C
table 将如下 -
对于每个 l
,j=1
将插入 C1
,j=2
将插入 C2
。
但我不能一概而论。
我试过像-
这样的语句
INSERT INTO C
SELECT 1,
C FROM WCR WHERE j=1,
C FROM WCR WHERE j=2;
和 Insert 语句中的子查询,如 -
INSERT INTO C
VALUES (1,
SELECT C FROM WCR WHERE j=1,
SELECT C FROM WCR WHERE j=2);
但是其中 none 可以在 Vertica 中使用,因为它不支持 INSERT
语句中的子查询并且第一个无效。如何有效地将值插入 C
?
一种方法使用 join
:
Insert into C(l, c1, c2)
select wcr1.l, wcr1.c, wcr2.c
from wcr wcr1 join
wcr wcr2
on wcr1.l = wcr2.l and wcr1.j = 1 and wcr2.j = 2;
另一种方法使用条件聚合:
insert into c(l, c1, c2)
select l, max(case when j = 1 then c end) as c1, max(case when j = 2 then c end)
from wcr
group by l;
我有一个 table WCR (l,j,W,C,R)
,其中包含以下条目。这里,l,j
是主键。
我必须将 WCR
的 C
列中的数据插入到另一个 table C(l,C1,C2)
中,其中 l
是主键。 C
table 将如下 -
对于每个 l
,j=1
将插入 C1
,j=2
将插入 C2
。
但我不能一概而论。
我试过像-
这样的语句INSERT INTO C
SELECT 1,
C FROM WCR WHERE j=1,
C FROM WCR WHERE j=2;
和 Insert 语句中的子查询,如 -
INSERT INTO C
VALUES (1,
SELECT C FROM WCR WHERE j=1,
SELECT C FROM WCR WHERE j=2);
但是其中 none 可以在 Vertica 中使用,因为它不支持 INSERT
语句中的子查询并且第一个无效。如何有效地将值插入 C
?
一种方法使用 join
:
Insert into C(l, c1, c2)
select wcr1.l, wcr1.c, wcr2.c
from wcr wcr1 join
wcr wcr2
on wcr1.l = wcr2.l and wcr1.j = 1 and wcr2.j = 2;
另一种方法使用条件聚合:
insert into c(l, c1, c2)
select l, max(case when j = 1 then c end) as c1, max(case when j = 2 then c end)
from wcr
group by l;