[firebird2] ma problem z pewnym select 'em
Art.R - 04-07-2007 00:01
[firebird2] ma problem z pewnym select 'em
witam, mam problem z pewnym zapytaniem (select) w bazie na firebird-2. Chcę wyciągnąć z tabeli PRZYCHOD_POZ i ROZCHOD_POZ listę magazynów, nazwę produktów oraz ilość produktów które się tam znajdują, czyli coś w rodzaju: ....SUM(PRZYCHOD_POZ. ILOSC- ROZCHOD_POZ. ILOSC)...
Mam następujące tabele:
CREATE TABLE PRZYCHOD_POZ ( ID NUMERIC(15,0) NOT NULL, ID_PRZYCHODU INTEGER, ID_MAGAZYNU INTEGER, ID_PRODUKTU INTEGER, ILOSC NUMERIC(9,2), NAZWA_PROD VARCHAR(64), NAZWA_MAGAZYNU VARCHAR(64)) oraz: CREATE TABLE ROZCHOD_POZ ( ID NUMERIC(15,0) NOT NULL, ID_PRZYCHODU INTEGER, ID_PRZYCHODUPOZ NUMERIC(15,0), ID_MAGAZYNU INTEGER, ID_PRODUKTU INTEGER, ILOSC NUMERIC(9,2), NAZWA_PROD VARCHAR(64), NAZWA_MAGAZYNU VARCHAR(64))
....tutaj, tak jak pisałem powyżej należało by odjąć ilość z tabeli rozchód od ilości z tabeli przychód. id_produktu chciałbym wprowadzać sam np: id_produktu=12 . Na tej podstawi wyświetlałaby mi się lista magazynów wraz z ilością znajdujący się w nich produktów z id_produktu=12
z góry dzięki za pomoc (siedzę nad tym już dwa dni)
poz., Art.r
---------------------------------------------------------------------- Pochwal sie innym, jak mieszkasz! >>> http://link.interia.pl/f1abe
-- Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych
Marcin Miga - 05-07-2007 00:00
Dwie propozycje na szybko: 1. SELECT z dwóch podselectów zagregowanych połączonych pomiędzy sobą po magazynie i produkcie. Ale nie wiem, czy FB/IB dopuszcza podselecty. Cos w ten deseń: SELECT p.magazyn, p.produkt, przychod-rozchod FROM (SELECT magazyn, produkt, SUM(ilosc) As przychod FROM przychody GROUP BY magazyn, produkt) As p JOIN (SELECT magazyn, produkt, SUM(ilosc) As rozchod FROM rozchody GROUP BY magazyn, produkt) As r ON r.magazyn=p.magazyn AND r.produkt = p.produkt
2. SELECT 'w drugą stronę' z wyróżnikiem lub odwrotnymi sumami...:) Czyli: SELECT magazyn, produkt, SUM(ilosc) As przychod FROM przychody GROUP BY magazyn, produkt UNION ALL SELECT magazyn, produkt, -SUM(ilosc) FROM rozchody GROUP BY magazyn, produkt
i na tym zrobiona agregacja.
pozdrawiaMM
Art.R - 05-07-2007 00:01
> Dwie propozycje na szybko: > 1. SELECT z dwóch podselectów zagregowanych połączonych pomiędzy sobą > po magazynie i produkcie. Ale nie wiem, czy FB/IB dopuszcza > podselecty. ....... FireBird 1,5 nie dopuszcza, dlatego jak na zbawienie czekałem na FireBird 2,0 tylko że po przeniesieniu bazy (FireBird 1,5) na inny komputer na którym jest zainstalowany FireBird 2,0 coś się porobiło z polskimi znakami (w czasie testów nic takiego się nie działo...) ....... >Cos w ten deseń: > SELECT p.magazyn, p.produkt, przychod-rozchod FROM (SELECT magazyn, > produkt, SUM(ilosc) As przychod FROM przychody GROUP BY magazyn, > produkt) As p JOIN (SELECT magazyn, produkt, SUM(ilosc) As rozchod > FROM rozchody GROUP BY magazyn, produkt) As r ON r.magazyn=p.magazyn > AND r.produkt = p.produkt ....... ten przykład (pow..) podał mi poprawne wyniki ale nie wszystkie które mnie interesowały, przypuszczam, że dzieje się tak dlatego ponieważ te magazyny są na produkcji i czasami jakiś produkt zmienia nazwę (również id, itd...), może być po stronie rozchodu a po stronie przychodu może być coś innego. ....... > 2. SELECT 'w drugą stronę' z wyróżnikiem lub odwrotnymi sumami... :) > Czyli: > SELECT magazyn, produkt, SUM(ilosc) As przychod FROM przychody GROUP > BY magazyn, produkt > UNION ALL > SELECT magazyn, produkt, -SUM(ilosc) FROM rozchody GROUP BY magazyn, > produkt > ...... ten drugi przykład to prawie to o co mi chodziło, ostatecznie wyglądało to w ten sposób:
SELECT nazwa, NAZWA_PROD, SUM(przychod) As ILOSC from (SELECT nazwa, NAZWA_PROD, SUM(ilosc) As przychod FROM przychodpoz GROUP BY nazwa, NAZWA_PROD UNION ALL SELECT nazwa, NAZWA_PROD, -SUM(ilosc) FROM rozchodpoz GROUP BY nazwa, NAZWA_PROD) group by nazwa, NAZWA_PROD
pozdrawiam i wielkie dzięki, bez pomocy chyba bym nie ruszył Art.R
---------------------------------------------------------------------- Bedzie skandal? T-shirty polityczne >> http://link.interia.pl/f1ac7
-- Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych
jh - 06-07-2007 00:03
Użytkownik "Art.R" <Art.Ryp@poczta.fm> napisał w wiadomości news:002301c7be59$80ab5f70$8c00000a@ppp1... > FireBird 1,5 nie dopuszcza, dlatego jak na zbawienie czekałem na FireBird > 2,0 > tylko że po przeniesieniu bazy (FireBird 1,5) na inny komputer na którym > jest zainstalowany FireBird 2,0 coś się porobiło z polskimi znakami (w > czasie > testów nic takiego się nie działo...)
Przenosiłeś przez backup? Czy po prostu kopiując plik? Ja przeniosłem robiąc backup w 1.5 i restore w 2 i działa.
Jacek
Art.R - 06-07-2007 00:03
> Użytkownik "Art.R" <Art.Ryp@poczta.fm> napisał w wiadomości > news:002301c7be59$80ab5f70$8c00000a@ppp1... >> FireBird 1,5 nie dopuszcza, dlatego jak na zbawienie czekałem na FireBird >> 2,0 >> tylko że po przeniesieniu bazy (FireBird 1,5) na inny komputer na którym >> jest zainstalowany FireBird 2,0 coś się porobiło z polskimi znakami (w >> czasie >> testów nic takiego się nie działo...) > > Przenosiłeś przez backup? Czy po prostu kopiując plik? Ja przeniosłem > robiąc backup w 1.5 i restore w 2 i działa. > > Jacek
właściwie to od instalowałem FB 1.5 i zainstalowałem FB 2, nic złego się nie stało więc wymyśliłem sobie, że jak przeniosę ten plik na inny komputer to też będzie dobrze.. Teraz jest trochę za późno, ale w sumie poprawiłem te dane w tabelach produkty, adresy itd.. potem zrobiłem pętle żeby poprawił dane tam gdzie było po kilkanaście tyś. rekordów i jest ok. ....pozostaje problem robienia kopii zapasowych tej bazy, wcześniej ktoś po prostu kopiował plik na inny komputer. IB Expert'a raczej nie zainstaluję, więc może zrobić to przy pomocy CMD i Zaplanowane zadania... Nie wiem czy taki fragment kodu wystarczy:
"gbak.exe -b -user sysdba -pass masterkey D:\magazyn\baza\MAGAZYN01.FDB D:\kopia_bazy\MAGAZYN01.FBK"
W IB Expert są jakieś dodatkowe parametry, ma może ktoś jakieś dośwadczenia z tym..?
Pozdrawiam i z góry dzięki za jakieś sugestje, Art.R
-----------------R--E--K--L--A--M--A----------------- Lepsze wiadomosci z kraju i z zagranicy. Nie wierzysz? Sprawdz - http://wiadomosci.interia.pl/
-- Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych
jh - 07-07-2007 00:02
Użytkownik "Art.R" <Art.Ryp@poczta.fm> napisał w wiadomości news:002501c7bf25$42661530$8c00000a@ppp1... > właściwie to od instalowałem FB 1.5 i zainstalowałem FB 2, nic złego się > nie stało więc wymyśliłem sobie, że jak przeniosę ten plik > na inny komputer to też będzie dobrze..
Teoretycznie zadziała, ale 2 ma nieco zmian w tabelach systemowych, dlatego IMHO powinieneś zrobić tak, jak napisałem.
> ...pozostaje problem robienia kopii zapasowych tej bazy, wcześniej ktoś po > prostu kopiował plik na inny komputer. może zrobić to przy pomocy CMD i > Zaplanowane zadania...
Dokładnie. Ja napisałem sobie programik, który robi backup/restore. Wrzucony do Zaplanowanych zadań odpala mi codzienne backupy. Przyznam, że w FB brakuje przyrostowych backupów, na pewno byłoby wygodniej i szybciej przy większych bazach.
> Nie wiem czy taki fragment kodu wystarczy: > "gbak.exe -b -user sysdba -pass masterkey D:\magazyn\baza\MAGAZYN01.FDB > D:\kopia_bazy\MAGAZYN01.FBK"
Robiłem np. tak w backup.cmd:
set DBPATH="C:\DB" set DBFILE="C:\DB\KONKURSY.FDB" set DBBAK="C:\DB\KONKURSY.FBK" set GBAK="c:\Program Files\Firebird\Firebird_1_5\bin\gbak.exe" @echo off if not Exist %GBAK% ( echo Przeinstaluj Firebird i Konkursy goto Finish ) :Process title Konkursy - Firebird Backup echo ------------------------------------- echo Witaj w Konkursy - Firebird Backup echo ------------------------------------- if ErrorLevel 7 goto Finish if not Exist %DBFILE% ( echo DB File %DBFILE% nie istnieje goto Finish ) dir %DBFILE% /4 /w echo Backup %DBFILE% - start o %time% %GBAK% -b -user SYSDBA -pas masterkey localhost:%DBFILE% %DBBAK% if ErrorLevel 1 ( echo Backup Error! goto Finish ) echo Backup %DBFILE% - koniec o %time% dir %DBBAK% /4 /w echo ----------------------------- echo Milego dnia! :Finish set GBAK= set DBPATH= set DBFILE= set DBBAK= echo ----------------------------- echo. @echo ON
Jacek
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.plquentinho.opx.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 |
|