Zapytanie o SQL

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 

5 myśli w temacie “Zapytanie o SQL”

  1. 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

  2. — 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

  3. 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

  4. 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

  5. Dzieki serdecznie wszystkim za pomoc, dziala bez bledu i to najwazniejsze!
    Raz jeszcze serdeczne dzieki!

Możliwość komentowania jest wyłączona.