ďťż
 
Re: UNION ALL , powiazanie dwóch tabel zapytanie SQL ďťż
 
Re: UNION ALL , powiazanie dwóch tabel zapytanie SQL
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Re: UNION ALL , powiazanie dwóch tabel zapytanie SQL



Filip Rembiałkowski - 10-08-2006 01:47

  Quenteen wrote:
> Witam mam dwie tabele: pracownicy: id_pracownik, nazwa, pensja,
> data_zmiany
> oraz tabele historia: id_historii, id_pracownik, nazwa, pensja,
> data_zmiany
>
>
> potrzebuje wyliczyc sume plac dla wszystkich pracownikow
> znajdujacych sie w tabeli pracownicy w danym dniu.

SQL 2000 obsługuje (AFAIR) taki predykat FIRST... więc

select SUM((
select FIRST 1 pensje.pensja -- wybierz ostatnią pensję dla podanej
daty
from (
SELECT id_pracownik, pensja, data_zmiany FROM pracownicy
UNION ALL
SELECT id_pracownik, pensja, data_zmiany FROM historia
) as pensje
WHERE data_zmiany <= [Forms]![fPlace].kalendarz
AND id_pracownik=pracownicy.id_pracownik
ORDER BY pensje.data_zmiany DESC
)) as suma_pensji
from pracownicy;

PS. cienka struktura danych. obejrzyj dowolny system typu "kadry i
płace", tam będziesz to miał zrobione porządnie.

F.





Quenteen - 10-08-2006 01:48

 
Filip Rembiałkowski napisał(a):
> Quenteen wrote:
> > Witam mam dwie tabele: pracownicy: id_pracownik, nazwa, pensja,
> > data_zmiany
> > oraz tabele historia: id_historii, id_pracownik, nazwa, pensja,
> > data_zmiany
> >
> >
> > potrzebuje wyliczyc sume plac dla wszystkich pracownikow
> > znajdujacych sie w tabeli pracownicy w danym dniu.
>
> SQL 2000 obsługuje (AFAIR) taki predykat FIRST... więc
>
> select SUM((
> select FIRST 1 pensje.pensja -- wybierz ostatnią pensję dla podanej
> daty
> from (
> SELECT id_pracownik, pensja, data_zmiany FROM pracownicy
> UNION ALL
> SELECT id_pracownik, pensja, data_zmiany FROM historia
> ) as pensje
> WHERE data_zmiany <= [Forms]![fPlace].kalendarz
> AND id_pracownik=pracownicy.id_pracownik
> ORDER BY pensje.data_zmiany DESC
> )) as suma_pensji
> from pracownicy;
>
> PS. cienka struktura danych. obejrzyj dowolny system typu "kadry i
> płace", tam będziesz to miał zrobione porządnie.
>
> F.

dzieki, jak bede mial dostep to sprawdze to rozwiazanie.
Natomiast strukturę miałem z góry narzuconą, no i narzędzie
również - MS ACCESS 2K.
Nie wiem czy przejdzie twoje rozwiazanie, ale jak mowie sprawdze to jak
najszybciej.
Thx.




Quenteen - 12-08-2006 01:32

  takie zapytanie (odrzucilem sume)

select FIRST (pensje.pensja)
from (
SELECT id_pracownik, pensja, data_zmiany FROM pracownicy
UNION ALL
SELECT id_pracownik, pensja, data_zmiany FROM historia
) as pensje
WHERE data_zmiany <= [Forms]![fPlace].kalendarz
AND id_pracownik=pracownicy.id_pracownik
ORDER BY pensje.data_zmiany DESC

wyrzuca blad, ze pensje.data_zmiany nie jest elementem funkcji
agregujacej.

jesli usunę linijkę ORDER BY pensje.data_zmiany DESC

to otrzymuję wynik w postaci jednego pola, które jest pensją o dacie
najbliższej tej wyszukiwanej, jednak dla jednego pracownika. Query,
powinno zwracac id pracownika i pensję dla kazdego pracownika.




Filip Rembiałkowski - 12-08-2006 01:32

 
Quenteen wrote:
> takie zapytanie (odrzucilem sume)
>
> select FIRST (pensje.pensja)
> from (
> SELECT id_pracownik, pensja, data_zmiany FROM pracownicy
> UNION ALL
> SELECT id_pracownik, pensja, data_zmiany FROM historia
> ) as pensje
> WHERE data_zmiany <= [Forms]![fPlace].kalendarz
> AND id_pracownik=pracownicy.id_pracownik
> ORDER BY pensje.data_zmiany DESC
>
> wyrzuca blad, ze pensje.data_zmiany nie jest elementem funkcji
> agregujacej.
>
> jesli usunę linijkę ORDER BY pensje.data_zmiany DESC
nie usuwaj, zmień FIRST na TOP

>
> to otrzymuję wynik w postaci jednego pola, które jest pensją o dacie
> najbliższej tej wyszukiwanej, jednak dla jednego pracownika. Query,
> powinno zwracac id pracownika i pensję dla kazdego pracownika.
tego nie napisałeś za pierwszym razem, zdecyduj się. mówiłeś o
sumie wszystkich pensji za dany dzień.





Quenteen - 12-08-2006 01:32

 
> tego nie napisałeś za pierwszym razem, zdecyduj się. mówiłeś o
> sumie wszystkich pensji za dany dzień.

Sorki, interesuje mnie suma oczywiscie, ale jak bede mial wszystkich
pracownikow i pensje to suma to jedna agregacja. :-)




Filip Rembiałkowski - 12-08-2006 01:32

 
Quenteen wrote:
> > tego nie napisałeś za pierwszym razem, zdecyduj się. mówiłeś o
> > sumie wszystkich pensji za dany dzień.
>
>
> Sorki, interesuje mnie suma oczywiscie, ale jak bede mial wszystkich
> pracownikow i pensje to suma to jedna agregacja. :-)

to masz przez prostą modyfikację :

select
pracownicy.id_pracownik,
(
select TOP 1 pensje.pensja
from (
SELECT id_pracownik, pensja, data_zmiany FROM pracownicy as a
UNION ALL
SELECT id_pracownik, pensja, data_zmiany FROM historia as b
) as pensje
WHERE pensje.data_zmiany <= [Forms]![fPlace].kalendarz
AND pensje.id_pracownik=pracownicy.id_pracownik
ORDER BY pensje.data_zmiany DESC
) as pensja_na_ten_dzien
from pracownicy;
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?= Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?= =?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?= [MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?= =?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?= Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?= [MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?= [Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?= =?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?= [newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • red-hacjenda.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com