PDA

View Full Version : SQL Insert in schleife



Seiten : 1 [2] 3

B.Hauser
29-09-08, 13:24
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

sam1502
11-11-08, 16:30
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:)

malzusrex
11-11-08, 19:25
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

malzusrex
11-11-08, 19:33
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

ReKoR
13-03-09, 10:38
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?

B.Hauser
13-03-09, 11:40
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

ReKoR
13-03-09, 11:52
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.

B.Hauser
13-03-09, 12:00
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

ReKoR
13-03-09, 12:02
Schade :( Aber der Freitag bringt eh selten Gutes :o

BenderD
13-03-09, 19:46
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