2017-05-10 1 views
1

enter image description here So kopieren Sie einen Spaltenwert aus einer Tabelle und speichern denselben Wert in einer anderen Tabelle als Zeile.So kopieren Sie einen Spaltenwert aus einer Tabelle und speichern denselben Wert in einer anderen Tabelle als Zeile

Ich habe zwei Tabellen, eine ist firsttbl und die zweite ist testtbl. dann haben die erste Tabelle mehr Datensätze und die zweite Tabelle muss denselben Wert in der ersten Tabelle kopieren.

firsttbl Originalsatz unter enter image description here

CORRELATION_ID      NAME   VALUE   TYPE    OBJECT_ID ARCHIVE_FLAG ARCHIVE_DATE WF_ID   REC_TIME  KEY_ID VALUE_UPPER 
43344255015b9b192916node1 TransactionSenderID SANMINACORT DOCUMENT 14804515b9b1924f9node1 -1    null 1912341 2017-04-23 08:56:09.0 20 SANMINACORT 
43391255115b9b192916node1 TransactionReceiverID 4017395800 DOCUMENT 14804515b9b1924f9node1 -1    null 1912341 2017-04-23 08:56:09.0 21 4017395800 
43376255215b9b192916node1 Level     Transaction DOCUMENT 14804515b9b1924f9node1 -1    null 1912341 2017-04-23 08:56:09.0 41 TRANSACTION 
43399255315b9b192916node1 GroupSenderID   SANMINACORT DOCUMENT 14804515b9b1924f9node1 -1    null 1912341 2017-04-23 08:56:09.0 28 SANMINACORT 
43356255415b9b192916node1 GroupReceiverID  4017395800 DOCUMENT 14804515b9b1924f9node1 -1    null 1912341 2017-04-23 08:56:09.0 30 4017395800 

2. Tabelle nur noch nicht erstellt, in einem beliebigen Wert gespeichert.

Die Namen der zweiten Tabelle coulmn sind bereits in firsttbl unter NAME coulmn gespeichert.

Ich werde Datensätze aus Firsttbl-Tabelle kopieren, damit der Firsttbl-Spaltenname VALUE alle 5 Werte in der zweiten Tabelle (testtbl) als Zeile gespeichert werden müssen. Dies ist die Abfrage ich versuche aber noch nicht erfolgreich.

INSERT INTO testtbl(TransactionSenderID,TransactionReceiverID,Level,GroupSenderID,GroupReceiverID) Select value from firsttbl; 

Dies ist der Fehler in PostgreSQL kommen.

ERROR: INSERT has more target columns than expressions LINE 1: INSERT INTO testtbl(TransactionSenderID,TransactionReceiverI... ^

********** Error **********

ERROR: INSERT has more target columns than expressions SQL state: 42601 Character: 41

+0

alle verknüpften Datensätze haben die gleiche object_id? Können Sie die Tabellendefinitionen liefern und aufräumen? –

Antwort

0

Dies sieht wie eine Pivot/Group Aggregation Frage aus. Ich habe nicht postgresql aber da die Frage markiert ist mysql hier eine MySQL-Lösung (wenn der quesion ist postgresql der Ansatz sollte ähnlich sein)

drop table if exists t; 
create table t (
CORRELATION_ID varchar(30), NAME varchar(30),VALUe varchar(30), TYPE VARCHAR(30), OBJECT_ID VARCHAR(30), ARCHIVE_FLAG VARCHAR(30), 
ARCHIVE_DATE datetime, WF_ID int, REC_TIME datetime, KEY_ID int, VALUE_UPPER varchar(20)); 
insert into t values 
('43344255015b9b192916node1', 'TransactionSenderID' ,'SANMINACORT' ,'DOCUMENT' ,'14804515b9b1924f9node1', '-1' ,null ,1912341 ,'2017-04-23 08:56:09.0', 20 ,'SANMINACORT'), 
('43391255115b9b192916node1', 'TransactionReceiverID' ,'4017395800' ,'DOCUMENT' ,'14804515b9b1924f9node1', '-1' ,null ,1912341 ,'2017-04-23 08:56:09.0' ,21 ,'4017395800'), 
('43376255215b9b192916node1', 'Level', 'Transaction', 'DOCUMENT' ,'14804515b9b1924f9node1' ,'-1' ,null ,1912341 ,'2017-04-23 08:56:09.0', 41 ,'TRANSACTION'), 
('43399255315b9b192916node1', 'GroupSenderID' ,'SANMINACORT', 'DOCUMENT' ,'14804515b9b1924f9node1' ,'-1' ,null ,1912341 ,'2017-04-23 08:56:09.0' ,28, 'SANMINACORT'), 
('43356255415b9b192916node1', 'GroupReceiverID', '4017395800', 'DOCUMENT' ,'14804515b9b1924f9node1' ,'-1' ,null ,1912341 ,'2017-04-23 08:56:09.0',30, '4017395800'); 

drop table if exists t2; 
create table t2(wf_id int,TransactionSenderID varchar(20), TransactionReceiverID varchar(20), Level varchar(20), GroupSenderID varchar(20), GroupReceiverID varchar(20)); 

insert into t2 
select wf_id, 
     max(case when name = 'TransactionSenderID' then value else null end), 
     max(case when name = 'TransactionReceiverID' then value else null end), 
     max(case when name = 'Level' then value else null end), 
     max(case when name = 'GroupSenderID' then value else null end), 
     max(case when name = 'GroupReceiverID' then value else null end) 
from t 
group by wf_id; 

select * from t2; 

MariaDB [sandbox]> select * from t2; 
+---------+---------------------+-----------------------+-------------+---------------+-----------------+ 
| wf_id | TransactionSenderID | TransactionReceiverID | Level  | GroupSenderID | GroupReceiverID | 
+---------+---------------------+-----------------------+-------------+---------------+-----------------+ 
| 1912341 | SANMINACORT   | 4017395800   | Transaction | SANMINACORT | 4017395800  | 
+---------+---------------------+-----------------------+-------------+---------------+-----------------+ 
1 row in set (0.00 sec) 
+0

Hallo P. Salmon, Vielen Dank das was ich erwartet habe. Dies ist die Abfrage, die erfolgreich ausgeführt wurde. Insert in T2 select wf_id, max (Fall, wenn name = 'TransactionSenderID' dann null Endwertes anderes), max (Fall, wenn name = 'TransactionReceiverID' dann null Endwertes anderes), max (Fall, wenn name = 'Level' dann value else null end), max (falls name = 'GroupSenderID' dann value else null end), max (fall wenn name = 'GroupReceiverID' dann wert else null end) von firsttbl group by wf_id ; Können Sie diese Abfrage erklären? –

Verwandte Themen