![]() |
AW: SQL-Statement funkt nicht
Zitat:
|
AW: SQL-Statement funkt nicht
wird folgendes auch unterstützt?
SQL-Code:
Damit wäre es übersichtlicher ... und wahrscheinlich auch schneller
UPDATE a
SET a.val = b.Val FROM a INNER JOIN b ON a.id = b.id
SQL-Code:
UPDATE artikelpreise
SET bruttopreis = b.bruttoneu, nettopreis = (b.bruttoneu / (100 + b.mwstsatz) * 100) FROM artikelpreise INNER JOIN artikelpreiseaenderung b ON artikelpreise.artikelpreis_id=b.artikelpreis_id |
AW: SQL-Statement funktioniert nicht
versuchs doch mal damit
Code:
alex
MERGE
INTO ARTIKELPREISE P USING ( SELECT A.ARTIKELPREIS_ID, A.BRUTTONEU, (A.BRUTTONEU / (100 + A.MWSTSATZ ) * 100 ) as NETTOPREISNEU FROM artikelpreiseaenderung A) PA ON (P.ARTIKELPREIS_ID = PA.ARTIKELPREIS_ID) WHEN MATCHED THEN UPDATE SET P.BRUTTOPREIS = PA.BRUTTONEU, P.NETTOPREIS = PA.NETTOPREISNEU; |
AW: SQL-Statement funktioniert nicht
Eigentlich hat khh die Lösung schon im 1. Posting fast richtig gehabt, bis auf eine Kleinigkeit:
Code:
So sollte es funktionieren:
update artikelpreise p1
set p1.bruttopreis = (SELECT bruttoneu as bruttopreis FROM artikelpreiseaenderung p2 WHERE p1.artikelpreis_id = p2.artikelpreis_id ), p1.nettopreis = (SELECT (bruttoneu / (100 + p2.mwstsatz ) *100 ) as nettopreis FROM artikelpreiseaenderung p2 WHERE p1.artikelpreis_id = p2.artikelpreis_id ) WHERE p1.artikelpreis_id = p2.artikelpreis_id;
Code:
Ralf
update artikelpreise p1
set p1.bruttopreis = (SELECT bruttoneu as bruttopreis FROM artikelpreiseaenderung p2 WHERE p1.artikelpreis_id = p2.artikelpreis_id ), p1.nettopreis = (SELECT (bruttoneu / (100 + p2.mwstsatz ) *100 ) as nettopreis FROM artikelpreiseaenderung p2 WHERE p1.artikelpreis_id = p2.artikelpreis_id ) WHERE p1.artikelpreis_id = artikelpreiseaenderung.artikelpreis_id; |
AW: SQL-Statement funktioniert nicht
Zitat:
sql-error -206 column unknown. Die Lösung mit "where ..in " funktioniert hingegen. Die matched und join-Lösungen muss ich noch testen. Ich danke euch Gruss KHH |
AW: SQL-Statement funktioniert nicht
Mmn kann das so doch auch nicht funktionieren. Wenn man das updaten mal rausläßt (und so tut als wäre es ein Select) steht doch in dem Statement:
Select p1.bruttopreis, p1.nettopreis From artikelpreise p1 WHERE p1.artikelpreis_id = artikelpreiseaenderung.artikelpreis_id; Und das kann in keiner der Formen (p2 oder Tabellenname) funktionieren. Wenn in p2 nur ein Element stünde ginge WHERE p1.artikelpreis_id = (Select p2.artikelpreis_id from artikelpreiseaenderung p2); Da aber i.d.R. mehrere Elemente zurückgeliefert werden "in" statt "=". In der Schule hatten wir neulich noch so Spezialbefehle, die ich schon wieder vergessen habe, weil wir die in der Firma nicht benutzen sollen. Damit konnte man die Schnittmenge bilden usw., das würde auch gehen. |
AW: SQL-Statement funktioniert nicht
Stimmt, so wie ich gedacht habe funktioniert es nicht.
Habe mal bei mir getestet und die Tabellennamen usw. an das angepasst was ich gerade zur Verfügung hatte. Dieses funktioniert jetzt:
Code:
Denke mal das kann man leicht anpassen.
SET TERM ^ ;
CREATE OR ALTER PROCEDURE P_PREISNEU as declare variable part integer; declare variable psumme numeric(12,4); begin for select art_nr,neupreis from preisaenderungen into :part, :psumme do begin update Verkaufsartikel p1 set p1.preis = :psumme, p1.preis_2 = :psumme / (100 + 19 ) *100 WHERE p1.art_nr = :part; end end^ SET TERM ; ^ GRANT SELECT ON PREISAENDERUNGEN TO PROCEDURE P_PREISNEU; GRANT SELECT,UPDATE ON VERKAUFSARTIKEL TO PROCEDURE P_PREISNEU; GRANT EXECUTE ON PROCEDURE P_PREISNEU TO SYSDBA; Ralf |
AW: SQL-Statement funktioniert nicht
Vielleicht so...
SQL-Code:
UPDATE artikelpreise
SET bruttopreis = (SELECT bruttoneu FROM artikelpreiseaenderung WHERE artikelpreis_id = artikelpreise.artikelpreis_id), nettopreis = (SELECT bruttoneu / (100 + mwstsatz ) * 100 FROM artikelpreiseaenderung WHERE artikelpreis_id = artikelpreise.artikelpreis_id) WHERE artikelpreis_id IN (SELECT artikelpreis_id FROM artikelpreiseaenderung) |
AW: SQL-Statement funktioniert nicht
Zitat:
Und zwar jeweils für jedes Subselect ('nettopreis', 'bruttopreis' und 'where in (Select..)'. Falls weitere Felder "upgedatet" werden müssen, kommt jeweils ein Durchlauf dazu.. Bei der Verwendung von
SQL-Code:
siehe
<merge statement> ::=
MERGE INTO <table or view> [ [AS] <correlation name> ] USING <table or view or derived table> [ [AS] <correlation name> ] ON <condition> [ <merge when matched> ] [ <merge when not matched> ] <merge when matched> ::= WHEN MATCHED THEN UPDATE SET <assignment list> <merge when not matched> ::= WHEN NOT MATCHED THEN INSERT [ <left paren> <column list> <right paren> ] VALUES <left paren> <value list> <right parent> ![]() wird 'artikelpreiseaenderung' nur einmal durchlaufen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz