MSSQL problem z UPDATE
S. - 17-06-2007 00:15
MSSQL problem z UPDATE
Witam, mam taka sobie tabelke, ktora bedzie zawierala informacje wyliczane podczas wstawiania (tabelka tylko do celow raportowych) z polami ID_PRODUKTU KWOTA1_1 KWOTA1_2 ZNACZNIK1 KWOTA2_1 KWOTA2_2 ZNACZNIK2
w pierwszym kroku wypelniam cala tabelke odpowiednimi produktami (znaczy ID_PRODUKTUma jakas wartosc), a w kolejnych krokach chcialabym odpowiednio aktualizowac dane - najpierw dla pol z oznaczeniem 1 (KWOTA1_1,KWOTA1_2,ZNACZNIK1), potem dla 2 (KWOTA2_1,KWOTA2_2,ZNACZNIK2) I teraz pytanie: jak skonstruowac zapytanie aktualizujace, ktore wstawi dla odpowiedniej ID_PRODUKTU odpowiednie sumy z tabeli zrodlowej TABELKA_ZRODLOWA TZ
Zaczynam tak:
UPDATE TABELKA SET KWOTA1_1 = SUM( WARTOSCI1), KWOTA1_2 = SUM( WARTOSCI2), ZNACZNIK1 = @WARTOSC --WCZESNIEJ ZNANA WARTOSC FROM TABELKA_ZRODLOWA TZ WHERE TZ.ZNACZNIK_ZRODLOWY = @WARTOSC + gdzies musze jeszcze wstawic warunek o tym, ze maja byc aktualizowane odpowiednie rekordy, dla ktorych id_produktu w TABELKA i TABELKA_ZRODLOWA sa rowne
Czy ktos moze mnie nakierowac??
S.
S. - 17-06-2007 00:15
Genralizujac: jaki napisac zapytanie aktualizujace, ktore aktualizuje wybrane pola pobierajac jakies sumy czy county po innych tabelach dla wybranych wierszy. Mam nadzieje, ze nie tlumacze tego w sposob zbyt skomplikowany
S.
mchlop - 17-06-2007 00:15
S. pisze: > Witam, mam taka sobie tabelke, ktora bedzie zawierala informacje wyliczane > podczas wstawiania (tabelka tylko do celow raportowych) z polami > ID_PRODUKTU > KWOTA1_1 > KWOTA1_2 > ZNACZNIK1 > KWOTA2_1 > KWOTA2_2 > ZNACZNIK2 > > w pierwszym kroku wypelniam cala tabelke odpowiednimi produktami (znaczy > ID_PRODUKTUma jakas wartosc), a w kolejnych krokach chcialabym odpowiednio > aktualizowac dane - najpierw dla pol z oznaczeniem 1 > (KWOTA1_1,KWOTA1_2,ZNACZNIK1), potem dla 2 (KWOTA2_1,KWOTA2_2,ZNACZNIK2) > I teraz pytanie: jak skonstruowac zapytanie aktualizujace, ktore wstawi dla > odpowiedniej ID_PRODUKTU odpowiednie sumy z tabeli zrodlowej > TABELKA_ZRODLOWA TZ > > Zaczynam tak: > > UPDATE TABELKA > SET KWOTA1_1 = SUM( WARTOSCI1), > KWOTA1_2 = SUM( WARTOSCI2), > ZNACZNIK1 = @WARTOSC --WCZESNIEJ ZNANA WARTOSC > FROM TABELKA_ZRODLOWA TZ > WHERE TZ.ZNACZNIK_ZRODLOWY = @WARTOSC > + gdzies musze jeszcze wstawic warunek o tym, ze maja byc aktualizowane > odpowiednie rekordy, dla ktorych id_produktu w TABELKA i TABELKA_ZRODLOWA sa > rowne > > Czy ktos moze mnie nakierowac?? > > S. > > > Witam z tego co zrozumialem powinno zadzialac takie zapytanie: UPDATE TABELKA SET KWOTA1_1 = SUM( WARTOSCI1), KWOTA1_2 = SUM( WARTOSCI2), ZNACZNIK1 = @WARTOSC --WCZESNIEJ ZNANA WARTOSC FROM TABELKA t inner join TABELKA_ZRODLOWA TZ on t.ID_PRODUKTU=TZ.ID_PRODUKTU WHERE TZ.ZNACZNIK_ZRODLOWY = @WARTOSC
pozdrawiam
S. - 17-06-2007 00:15
> Witam > z tego co zrozumialem powinno zadzialac takie zapytanie: > UPDATE TABELKA > *SET KWOTA1_1 = SUM( WARTOSCI1), > * * * *KWOTA1_2 = SUM( WARTOSCI2), > * * * *ZNACZNIK1 = @WARTOSC --WCZESNIEJ ZNANA WARTOSC > *FROM TABELKA t > * *inner join *TABELKA_ZRODLOWA TZ on t.ID_PRODUKTU=TZ.ID_PRODUKTU > *WHERE TZ.ZNACZNIK_ZRODLOWY = @WARTOSC >
No wlasnie tez mi sie tak wydawalo, ale komunikat bledu jest nastepujacy "An aggregate may not appear in the set list of an UPDATE statement."
-- Wys?ano z serwisu OnetNiusy: http://niusy.onet.pl
=?ISO-8859-2?Q?Artur_Muszy=F1ski?= - 17-06-2007 00:15
S. pisze: > Genralizujac: jaki napisac zapytanie aktualizujace, ktore aktualizuje > wybrane pola pobierajac jakies sumy czy county po innych tabelach dla > wybranych wierszy. Mam nadzieje, ze nie tlumacze tego w sposob zbyt > skomplikowany
Co? takiego?
use pubs; create table test (id int primary key,n int); insert into test (id) values (8042); update test set n=x from ( select stor_id,sum(qty) as x from sales group by stor_id ) as t where stor_id=id
artur
Marcin A. Guzowski - 17-06-2007 00:16
S. wrote: >> Witam >> z tego co zrozumialem powinno zadzialac takie zapytanie: >> UPDATE TABELKA >> SET KWOTA1_1 = SUM( WARTOSCI1), >> KWOTA1_2 = SUM( WARTOSCI2), >> ZNACZNIK1 = @WARTOSC --WCZESNIEJ ZNANA WARTOSC >> FROM TABELKA t >> inner join TABELKA_ZRODLOWA TZ on t.ID_PRODUKTU=TZ.ID_PRODUKTU >> WHERE TZ.ZNACZNIK_ZRODLOWY = @WARTOSC >> > > No wlasnie tez mi sie tak wydawalo, ale komunikat bledu jest nastepujacy > "An aggregate may not appear in the set list of an UPDATE statement."
Agregacje wykonuj w podzapytaniu, a UPDATE rób na zasadzie:
UPDATE tab1 SET suma = tab2.sum FROM tabela tab1 INNER JOIN ( SELECT id, SUM(wartosc) AS sum FROM tabela GROUP BY wartosc ) tab2 ON (tab1.id = tab2.id)
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
Marcin A. Guzowski - 17-06-2007 00:16
Marcin A. Guzowski wrote:
> UPDATE tab1 SET suma = tab2.sum > FROM > tabela tab1 > INNER JOIN > ( > SELECT id, SUM(wartosc) AS sum > FROM tabela > GROUP BY wartosc
Oczywi?cie powinno by?:
GROUP BY id
Lo siento.
> ) tab2 > ON (tab1.id = tab2.id)
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
[postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?=
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
[PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ?
[MySQL] Problem z zapisem danych w bazie danych
Problem z mysql - can't connect to MySQL/nietypowo...
zanotowane.pldoc.pisz.plpdf.pisz.plfantazia.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|