Welcome to Sign in | Help
in Search

scrip de select sql server 2000

Last post 07-17-2007, 6:52 PM by Alex. 34 replies.
Page 2 of 3 (35 items)   < Previous 1 2 3 Next >
Sort Posts: Previous Next
  •  07-16-2007, 4:04 PM 2268 in reply to 2267

    Re: scrip de select sql server 2000

    ...a, si mai am o curiozitate: la ce firma ai dat interviul asta?
  •  07-16-2007, 4:11 PM 2269 in reply to 2264

    Re: scrip de select sql server 2000

    ...si cand astia intreaba "acelasi numar de mii de locuitor" ce inteleg prin asta?


  •  07-16-2007, 4:19 PM 2270 in reply to 2267

    Re: scrip de select sql server 2000

    astea sunt singurele 2 pe care mi le-am notat.....si eu incerc sa "culeg" cat mai multe....chiar deschisesem un post pe tema asta....dar am vazut ca nu a mers prea departe ideea.....daca reusesc sa mai adun cate ceva iti trimit...sau daca imi mai amintesc.

    alex.

  •  07-16-2007, 4:29 PM 2272 in reply to 2269

    Re: scrip de select sql server 2000

    asta e linkul unde am incercat sa adun cat mai multe intrebari de pe la interviuri

    http://sqlserver.ro/forums/thread/1968.aspx

    acelasi numar de mii.....adica 2 judete care au acelasi numar de locuitori la nivel de mii....adica daca unul are 22.300 si altul 22.700 sa fie afisat

    eu ma gadesc la varianta asta:

    select * from
     (select sum(nr_locuitori)nr_mii,id_judet
      from localitate
      group by id_judet)tab1
    join judet tab2 on tab1.id_judet=tab2.id_judet
    and left(cast(nr_mii as varchar),len(cast(nr_mii as varchar))-3) in
      (select left(cast(sum(nr_locuitori) as varchar),len(cast(sum(nr_locuitori) as varchar))-3)
                     from localitate l
                     where l.id_judet<>tab1.id_judet
                     group by l.id_judet)

    alex.

  •  07-16-2007, 5:32 PM 2273 in reply to 2268

    Re: scrip de select sql server 2000

    ti-am trimis pm
  •  07-16-2007, 5:34 PM 2274 in reply to 2273

    Re: scrip de select sql server 2000

    Multumesc...nu a ajuns inca (?)...

    Pentru punctul 3  din prima intrebare ("cea mai populata unitate teritoriala.....")

    --tabelul temporar cuprinde populatia fiecarui "judet" 

    DECLARE @t TABLE(id_tara int, id_judet int, pop int)
    INSERT INTO @t
    SELECT t.id_tara, j.id_judet, SUM(nr_locuitori) AS pop
    FROM tara t JOIN Judet j ON t.id_tara = j.id_tara
    JOIN Localitate l ON j.id_judet = l.id_judet
    GROUP BY t.id_tara, j.id_judet

    -- aici selectez din fiecare tara "judetul" cel mai populat

    SELECT t.id_tara, t.nume_tara, j.id_judet, j.nume_judet, x.mx
    FROM Tara t JOIN Judet j ON t.id_tara = j.id_tara
    JOIN (SELECT tmp.id_tara, MAX(pop) AS mx
        FROM @t AS tmp GROUP BY tmp.id_tara
        ) AS x ON x.id_tara = j.id_tara
    JOIN @t tmp ON x.mx = tmp.pop AND j.id_judet = tmp.id_judet

  •  07-16-2007, 7:32 PM 2276 in reply to 2274

    Re: scrip de select sql server 2000

    da...merge f bine si varianta ta........cu tabela temporara....:)

    alex. 

  •  07-16-2007, 8:26 PM 2277 in reply to 2276

    Re: scrip de select sql server 2000

    Uite încă o variantă de rezolvare în care folosesc un inner join între două subinterogări totuşi ce trebuie să se întâmple dacă o ţară are două judeţe cu acelaşi număr de locuitori pe primul loc? 

    SELECT Q.NUME_TARA, W.NUME_JUDET, Q.NR_LOCUITORI FROM (
     SELECT NUME_TARA, MAX(NUMAR_LOCUITORI) AS NR_LOCUITORI FROM (
      SELECT NUME_TARA, NUME_JUDET, SUM(NR_LOCUITORI) AS NUMAR_LOCUITORI
      FROM TARA T INNER JOIN JUDET J ON T.ID_TARA=J.ID_TARA INNER JOIN LOCALITATE L ON J.ID_JUDET=L.ID_JUDET
      GROUP BY NUME_TARA, NUME_JUDET
     ) X
     GROUP BY NUME_TARA
    ) Q INNER JOIN (
     SELECT NUME_TARA, NUME_JUDET, NUMAR_LOCUITORI FROM (
      SELECT NUME_TARA, NUME_JUDET, SUM(NR_LOCUITORI) AS NUMAR_LOCUITORI
      FROM TARA T INNER JOIN JUDET J ON T.ID_TARA=J.ID_TARA INNER JOIN LOCALITATE L ON J.ID_JUDET=L.ID_JUDET
      GROUP BY NUME_TARA, NUME_JUDET
     ) Y
    ) W ON Q.NUME_TARA=W.NUME_TARA AND Q.NR_LOCUITORI=W.NUMAR_LOCUITORI

    ORDER BY 1,3 DESC, 2

     

    Datele pentru test:

    INSERT INTO Tara(nume_tara, latitudine, longitudine) VALUES('Romania',0,0)
    INSERT INTO Tara(nume_tara, latitudine, longitudine) VALUES('SUA',0,0)
    GO
    INSERT INTO Judet (ID_Tara,nume_judet, asezare) VALUES (1,'Timis','')
    INSERT INTO Judet (ID_Tara,nume_judet, asezare) VALUES (1,'Constanta','')
    INSERT INTO Judet (ID_Tara,nume_judet, asezare) VALUES (2,'Denver','')
    GO
    INSERT INTO Localitate(ID_Judet,nume_loc,nr_locuitori) VALUES(10,'Timisoara mare',250)
    INSERT INTO Localitate(ID_Judet,nume_loc,nr_locuitori) VALUES(10,'Timisoara mica',25)
    INSERT INTO Localitate(ID_Judet,nume_loc,nr_locuitori) VALUES(20,'Cuza',1250)
    INSERT INTO Localitate(ID_Judet,nume_loc,nr_locuitori) VALUES(20,'Mangalia',270)
    INSERT INTO Localitate(ID_Judet,nume_loc,nr_locuitori) VALUES(30,'denver',11250)

    iar rezultatul este:

    NUME_TARA |  NUME_JUDET   |  NR_LOCUITORI
    SUA              |  Denver              |  11250
    Romania        |  Constanta         |  1520

    Sper că am înţeles bine cerinţa...


    Cătălin D.
  •  07-16-2007, 8:51 PM 2278 in reply to 2277

    Re: scrip de select sql server 2000

    daca nu ar fi nevoie de afisarea Nume_judet si ar fi de ajuns Nume_tara, Numar_locuitori ar fi de ajuns selectul:

    SELECT NUME_TARA, MAX(NUMAR_LOCUITORI) AS NR_LOCUITORI FROM
            (SELECT NUME_TARA, NUME_JUDET, SUM(NR_LOCUITORI) AS NUMAR_LOCUITORI
              FROM TARA T INNER JOIN JUDET J ON T.ID_TARA=J.ID_TARA INNER JOIN LOCALITATE L ON J.ID_JUDET=L.ID_JUDET
              GROUP BY NUME_TARA, NUME_JUDET) X
         GROUP BY NUME_TARA

    care scoate maxim pe tara din suma locuitorilor  pe judete :)

    alex. 

  •  07-17-2007, 11:11 AM 2279 in reply to 2253

    Re: scrip de select sql server 2000

    Alex:
    ...

    as dori sa fac un select care sa-mi intoarca tara,nume_judet,localitate al localitatilor cu cel mai mare numar de locuitori

    multumesc mult

    <date_test>

    INSERT INTO Tara (nume_tara,latitudine,longitudine) VALUES ('A',1,1)
    INSERT INTO Tara (nume_tara,latitudine,longitudine) VALUES ('BB',2,2)

    INSERT INTO Judet (id_tara,nume_judet,asezare) VALUES (1,'J_A','est')
    INSERT INTO Judet (id_tara,nume_judet,asezare) VALUES (1,'J_B','est')
    INSERT INTO Judet (id_tara,nume_judet,asezare) VALUES (2,'J_C','vest')
    INSERT INTO Judet (id_tara,nume_judet,asezare) VALUES (2,'J_D','nord')
    INSERT INTO Judet (id_tara,nume_judet,asezare) VALUES (2,'J_E','est')

    INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (10,'L_A',100)
    INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (10,'L_B',110)
    INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (10,'L_C',111)
    INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (20,'L_D',200)
    INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (30,'L_E',300)
    INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (30,'L_F',330)
    INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (40,'L_G',50)
    INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (40,'L_H',50)
    INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (40,'L_I',110)
    INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (40,'L_J',111)
    INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (50,'L_K',330)

    </date_test> 

     

    <solutie>

    SELECT L.nume_loc , J.nume_judet , T.nume_tara , L.nr_locuitori
    FROM Localitate L INNER JOIN Judet J ON L.id_judet = J.id_judet
        INNER JOIN Tara T ON J.id_tara = T.id_tara
    WHERE L.nr_locuitori >= ALL(SELECT nr_locuitori FROM Localitate)

    </solutie> 

  •  07-17-2007, 11:49 AM 2280 in reply to 2279

    Re: scrip de select sql server 2000

    Ar fi fost mult mai interesanta urmatoarea cerinta:

    "select care sa-mi intoarca tara,nume_judet,localitate al localitatilor cu cel mai mare numar de locuitori" din fiecare ţară

    <solutie> 

    SELECT T.nume_tara, J.nume_judet, L.nume_loc, MAX(L.nr_locuitori) AS Nr
    FROM Localitate L INNER JOIN Judet J ON L.id_judet = J.id_judet
        INNER JOIN Tara T ON J.id_tara = T.id_tara
    GROUP BY T.id_tara, L.id_loc , T.nume_tara, J.nume_judet, L.nume_loc
        HAVING MAX(L.nr_locuitori) >=
            ALL(SELECT LSQ.nr_locuitori
                FROM Localitate LSQ INNER JOIN Judet JSQ ON LSQ.id_judet = JSQ.id_judet
                WHERE JSQ.id_tara = T.id_tara )

    </solutie>

    <set_de_inregistrari_rezultat>

    A    J_B    L_D    200
    BB    J_C    L_F    330
    BB    J_E    L_K    330

     </set_de_inregistrari_rezultat>

  •  07-17-2007, 12:21 PM 2281 in reply to 2280

    Re: scrip de select sql server 2000

    Eu am înţeles că este vorba de a selecta fiecare ţara cu judeţul cel mai populat şi numărul de locuitori.

     B_gd_n[ ]Sahlean  în prima variantă aflăm doar ţara care are cel mai populat judeţ (de fapt aflăm ţara cu judeţul ce deţine localitatea cu cel mai mare număr de locuitori dar nu este tratat cazul în care avem două localităţi în acelaşi oraş). În a 2-a variantă nu este tratat cazul în care există două sau mai multe localităţi intr-un judeţ.

     

     


    Cătălin D.
  •  07-17-2007, 12:49 PM 2282 in reply to 2281

    Re: scrip de select sql server 2000

    katalyn:

     ... două localităţi în acelaşi oraş ...

    ?

     
    Poate vrei sa spui "două localităţi în acelaşi judet"  ?!

    <date_test> 

    UPDATE Localitate
    SET nr_locuitori = 330
    WHERE nume_loc = 'L_E'

    </date_test>

     

    <set_inregistrari_rezultat> 

    L_E    J_C    BB    330
    L_F    J_C    BB    330
    L_K    J_E    BB    330 

    </set_inregistrari_rezultat>

  •  07-17-2007, 1:02 PM 2283 in reply to 2281

    Re: scrip de select sql server 2000

    katalyn:

    Eu am înţeles că este vorba de a selecta fiecare ţara cu judeţul cel mai populat şi numărul de locuitori.

     B_gd_n[ ]Sahlean  în prima variantă aflăm doar ţara care are cel mai populat judeţ (de fapt aflăm ţara cu judeţul ce deţine localitatea cu cel mai mare număr de locuitori dar nu este tratat cazul în care avem două localităţi în acelaşi oraş). În a 2-a variantă nu este tratat cazul în care există două sau mai multe localităţi intr-un judeţ.
     

     

    [1] Cerinţa din primul mesaj este: "as dori sa fac un select care sa-mi intoarca [...] localitatilor cu cel mai mare numar de locuitori"

    Cerinţa este foarte clară şi nu implică condiţii privitoare la ţară sau/şi judeţ. Ai interpretat eronat enunţul. 

    [2] Vezi mesajul anterior. Cerinţa era foarte clară şi tu ai interpretat-o eronat. 

  •  07-17-2007, 1:05 PM 2284 in reply to 2281

    Re: scrip de select sql server 2000

    ---
Page 2 of 3 (35 items)   < Previous 1 2 3 Next >
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems