Hi,
es geht bei mir um Folgendes...
Ich habe eine Tabelle (test) mit 15 verschiedenen Spalten und darin enthaltenen Daten, alle VARCHAR(255) bis auf die Spalte ID_Druck (integer)
Die Abfrage soll mir den Ersten, letzten und jeden 5000sten Datensatz duplizieren und in das Duplikat in die Spalte "BELEGE" einen beliebigen Textwert (hier Belege) eintragen
Meine Abfrage funktioniert soweit gut mit dem Duplizieren der Spalten, jedoch bekomme ich es einfach nicht hin, dass nur in die Duplizierten Spalten 'Belege' eingetragen wird.
Als Server benutze ich PostgreSQL Vesion 9.1.1-1
Vielleicht kann mir hierbei jemand helfen
Die Abfrage sieht folgendermaßen aus:
WITH belege AS (SELECT * FROM test WHERE "ID_Druck" = 1UNION ALLSELECT * FROM test WHERE 0 = round(mod("ID_Druck",5000))UNION ALLSELECT * FROM test WHERE "ID_Druck" = (SELECT max("ID_Druck") FROM test)belegein AS (
),UPDATE test SET "BELEGE" = 'Beleg')INSERT INTO test SELECT * FROM belege, belegein
Geändert von truehumandesign (02.12.2011 um 18:14 Uhr)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
So klar?Code:test=# select * from truehumandesign; id | c | t ----+-------+--- 1 | eins | 2 | zwei | 3 | frei | 4 | vier | 5 | fuenf | (5 rows) test=*# with beleg as (select c, 'NEU' from truehumandesign) insert into truehumandesign (c, t) select * from beleg; INSERT 0 5 test=*# select * from truehumandesign; id | c | t ----+-------+----- 1 | eins | 2 | zwei | 3 | frei | 4 | vier | 5 | fuenf | 6 | eins | NEU 7 | zwei | NEU 8 | frei | NEU 9 | vier | NEU 10 | fuenf | NEU (10 rows)
Andreas, selbst select * oben im Einsatz ;-)
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Vermutlich habe ich die Fragestellung etwas komisch geschrieben.
Hab jetzt aber ne Query hinbekommen die dem ganzen schon eher ähnelt was ich will:
Das einzigste woran es jetzt noch hakt ist, dass er Beleg nur in die Duplizierte Spalte kopieren soll und nicht auch in die andere.Code:WITH belege AS (UPDATE foo2 SET "BELEGE" = 'Beleg' WHERE "ID_Druck" = 1 OR "ID_Druck" = (SELECT max("ID_Druck") FROM foo2) OR 0 = round(mod("ID_Druck",5000)) RETURNING * ) INSERT INTO foo2 SELECT * FROM belege
Er fügt ja im moment überall wo 1 oder max(ID_Druck) oder jede 5000ste "ID_Druck" Belege ein
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
ARRRR... Ich mach schon den ganzen tag an dem Teil rum und raffs einfach nicht
Nichtmal ein kleiner Hinweis?![]()
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ja ich seh schon das er Alle Spalten die 1 oder max("ID_Druck") etc. ein "beleg" einfügt.
Ich hab jedoch keine ahnung wie ich es umschreiben soll, das er nur in die angefügten Beleg einfügt
Vielleicht komme ich ja hiermit auf den richtigen Weg:
Leider akzeptiert er die abfrage nichtWITH belege AS (INSERT INTO foo2 ("BELEGE") VALUES ('Beleg')
WHERE "ID_Druck" = 1
OR "ID_Druck" = (SELECT max("ID_Druck") FROM foo2)
OR 0 = round(mod("ID_Druck",5000))
RETURNING *
)
INSERT INTO foo2 SELECT * FROM belege
Geändert von truehumandesign (02.12.2011 um 21:40 Uhr)
Innerhalb von WITH belege ( ... ) machst Du ein Select mit Deiner WHERE-Condition, den Spalten, die übernommen werden sollen und den Werten, die statt der in den Spalten stehenden Werten eingesetzt werden sollen. Das Resultat hängst Du via INSERT an Deine Tabelle. Also, innerhaln von WITH belege ( ... ) muß das rausrommen, was Du anhängen willst. Kann doch nicht SOOO schwer sein, oder?
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen