Pozdrawiam serdecznie,
Na pewno wielu bawi sie SQL, mam zapytanie w tym zakresie.
Mam cos takiego, niby dosc proste.
Mam dwie tablice:
Tablica #1 zawiera 2 kolumny: numer zakladu/podzakladu, jego nazwe
Tablica #2 zawiera 3 kolumny: numer zakladu, numer podzakladu, ilosc osob zatrudnionych
czYli mamy np.
TABLICA1
100,zaklad#1
101,podzaklad#11
102,podzaklad#12
200,zaklad#1
201,podzaklad#21
202,podzaklad#22
TABLICA2 ma wiersze
100,101,5
100,102,7
200,201,6
200,202,8
Moge zrobic oczywiscie:
SELECT *
FROM TABLICA2
i wtedy dostane numerki zakladow i ilosc zatrudnionych np.
100 101 5
100 102 7
itp.
ale ja chcialbym miec ich nazwy czyli cos takiego
zaklad#1 podzaklad#11 5
zaklad#1 podzaklad#12 7
zaklad#2 podzaklad#21 6
zaklad#2 podzaklad#22 8
itp.
Na dodatek musze miec posortowane wedlug nazw, a nie numerow zakladu,
czyli tak jak podalem powyzej, a nie np.
zaklad#1 podzaklad#12 7
zaklad#1 podzaklad#11 5
gdyz w tablicy TABLICA2 moge miec np:
100 102 7
100 101 5
dzieki z gory za wszelkie wskazowki/rozwiazania.
Pozdrawiam,
Roman
Czy zaklady i podzaklady maja unikalne numery wzgledem siebie? Jesli tak to to jest do zrobienia. Dwa SELECT’y (jeden robi JOIN na zakladzie z drugiej tablicy a drugi na podzakladzie z drugiej tablicy) wybierajac takze nazwe. Potem UNION miedzy nimi i ORDER BY nazwa. Jesli chcesz wyeliminowac nazwe z wyniku koncowego to uzyj zewnetrznego SELECT na tej konstrukcji wybierajac tylko kolumny ktore potrzebujesz. No tak mi sie wydaje ale sa lepsi w SQL 😉
-Maciek
— baza danych – SQL Server
if OBJECT_ID(’tempdb.dbo.#TABLICA1′) is not null drop table #TABLICA1
create table #TABLICA1 (
EntityID int
, Entity varchar(50)
)
if OBJECT_ID(’tempdb.dbo.#TABLICA2′) is not null drop table #TABLICA2
create table #TABLICA2 (
ParentID int
, ChildID int
, NumberOfEmployees int
)
insert into #TABLICA1 select 100,’zaklad#1′
insert into #TABLICA1 select 101,’podzaklad#11′
insert into #TABLICA1 select 102,’podzaklad#12′
insert into #TABLICA1 select 200,’zaklad#2′
insert into #TABLICA1 select 201,’podzaklad#21′
insert into #TABLICA1 select 202,’podzaklad#22′
insert into #TABLICA2 select 100,101,5
insert into #TABLICA2 select 100,102,7
insert into #TABLICA2 select 200,201,6
insert into #TABLICA2 select 200,202,8
select * from #TABLICA1
select * from #TABLICA2
select Parent = B1.Entity
, Child = B2.Entity
, A.NumberOfEmployees
from #TABLICA2 A
left join #TABLICA1 B1
on A.ParentID = B1.EntityID
left join #TABLICA1 B2
on A.ChildID = B2.EntityID
order by Parent
, Child
DB2:
select t1.nazwa, t2.nazwa, a.ilosc
from TABLICA2 a
join TABLICA1 t1 on t1.#zakladu/podzakladu = a.#zakladu
join TABLICA1 t2 on t2.#zakladu/podzakladu = a.#podzakladu
order by 1, 2
— Maciek
Maciek,
Niezle. Zapomnialem ze mozna zrobic podwojny JOIN z innym aliasem by uproscic sprawe i traktowac tablice jak dwie rozne. Cale UNION jest niepotrzebne. Niedawno tak wlasnie robilem (krotka pamiec). No i strzeliles moj pomysl w leb 😉
Dzieki.
-Maciek
Dzieki serdecznie wszystkim za pomoc, dziala bez bledu i to najwazniejsze!
Raz jeszcze serdeczne dzieki!