View Full Version : SQL Insert in schleife
ich will gerne jetzt im Felder die widerholt vorkommen, einen Wert einfügen wie 0 oder 1 oder char
Dazu musst Du die Duplikate zunächst ermitteln, das Ergebnis mit der Original-Datei verknüpfen und wenn Duplikat den gewünschten Wert, z.B. setzen.
with x as (Select Name, Nachname from MyTable
group by Name, Nachname
having count(*) > 1)
select a.*, case when x.Name is not NULL then 1 else 0 End
from MyTable a left outer join x using(Name, Vorname)
Birgitta
Hallo Zusammen,
ich habe eine email Adreese, die will ich mit eine SQL Abfrage in 2 Felder speichern
eingabe: testtt@prvider.de
ich möchte gerne testtt in Spalte1 und provider.de in Spalte2 haben.
kann mir jemand helfen. Vielen Dank im Voraus.
Sam:)
Hallo Zusammen,
ich habe eine email Adreese, die will ich mit eine SQL Abfrage in 2 Felder speichern
eingabe: testtt@prvider.de
ich möchte gerne testtt in Spalte1 und provider.de in Spalte2 haben.
kann mir jemand helfen. Vielen Dank im Voraus.
Sam:)
Hallo Sam,
eigentlich hättest Du dafür ja ein neues Thema auf machen können, aber egal.
Das SQL müsste in etwa so aussehen:
update MyLib/MyFile
set name = Substring(email, 1, (position('@' in email)-1) ),
provider = Substring(email, (position('@' in email)+1),
50 - (position('@' in email)+1))
Wo bei ich jetzt Unterstellt habe, das das Feld "EMAIL" 50 Stellen lang ist.
Gruß Ronald
so sollte es dann auch gehen ohne zu wissen wie lang das Feld EMAIL ist
update qtemp/test
set name = Substring(email, 1, (position('@' in email)-1) ),
provider = Substring(email, (position('@' in email)+1),
(char_length(trim(email)) -
position('@' in email)+1))
Gruß Ronald
Hi,
mir fehlt irgendwo eine Tabelle in Deinem SQL-Statement.
Aber versuch mal folgendes:
insert into Lib/File_1
with x as (Select distinct(Feld_X) from Lib/File_2
where Feld_X like '%D01')
select Feld_a, Feld_b, Feld_X, Feld_d, ....
from Lib/File_3 cross join x
Where ........
Birgitta
Hi zusammen,
ich habe ein ganz ähnliches Problem.
Ich versuche Daten aus Tabelle A in Tabelle B zu schreiben. Hierbei muss aber für jeden Satz in B die ID um 1 erhöht werden. Mit Max(ID) versucht er einen doppelten Schlüsselwert zu erzeugen, da die Dummy-Tabelle x nur einmal erzeugt wird. Geht das auch pro Satz?
Hallo,
falls Du auf Release V5R4 oder höher bist, könntest Du die Funktion ROW_NUMBER verwenden.
Vorausgesetzt Tabelle 1 und Tabelle 2 haben den gleichen Aufbau, außer dass in Tabelle 2 das 1. Feld (für den Zähler zusätzlich ist), könntest Du das folgende probieren:
insert into mytable2
With y as (Select Max(RowNbr) + 1 as LastRow from MyTable2),
x as (Select Row_Number() Over() + LastRow, a.*
from mytable a cross join y)
select * from x
Ansonsten wäre es möglich ein Sequence-Objekt anzulegen, mit Start-Wert maximale Satz-Nr. in Tabelle 2.
Beim Insert wird dann der Zähler aus dem Sequence-Objekt ermittelt.
CREATE SEQUENCE MySchema/MySeq as BIGINT
START WITH 327 INCREMENT BY 1
NO ORDER NO CYCLE NO MINVALUE NO MAXVALUE
CACHE 20;
insert into mytable2
Select Next Value from mySeq, a.*
from mytable1;
Birgitta
Hallo Birgitta,
Option 1 scheidet leider aus. Release ist V4R4 und die Tabellen sind auch vollkommen verschieden.
Sofern Option 2 bei unserem Release funktioniert, werde ich das am Montag mal probieren. Ansonsten muss ein kleines RPG her.
Die zweite Variante wird auch nicht funktionieren, da Sequence-Objekte erst mit Release V5R3 eingeführt wurden.
Da wird wohl die einzige Alternative "zu Fuß", sprich Programm heißen.
Birgitta
Schade :( Aber der Freitag bringt eh selten Gutes :o
ich habe zwar den Thread nur oberflächlich gelesen, aber 2 SQL Statements müssten es eigentlich auch tun
create table loeschMichNachher as(
select ...
) with data
insert into ... select max(...) + rrn(loeschMichNachher), ...
D*B
Die zweite Variante wird auch nicht funktionieren, da Sequence-Objekte erst mit Release V5R3 eingeführt wurden.
Da wird wohl die einzige Alternative "zu Fuß", sprich Programm heißen.
Birgitta