Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sortiranje i Distinct funkcija

[es] :: MS SQL :: Sortiranje i Distinct funkcija

[ Pregleda: 2994 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Arbitar2
Arbitar2
Serbia

Član broj: 51869
Poruke: 39
*.dynamic.sbb.rs.



Profil

icon Sortiranje i Distinct funkcija13.02.2009. u 21:20 - pre 184 meseci
Pozdrav,

Imam veliki problem sa sortiranjem i distinct funkcijom u MS SQL Server 2005. Naime, radi se o tome da ne mogu da sortiram kolone na osnovu dve table ako se kolona iz druge tabele ne nalazi u select statemant-u.
Na primer imam dve table 'A' i 'B'.

Sql statement koji ne radi je

Code:


      select distinct b.id from  A a , B b  where b.id = a.b_id  order by b.name;



gresku koju mi javlja je : " ORDER BY items must appear in the select list if SELECT DISTINCT is specified. "
Veoma bitna stvar je u tome da mora da mi vrati samo jednu kolonu.
Interesantna stvar je u tome da MySql podrzava ovakav 'sql statement' !?
Veoma mi je vazno da na bilo koji nacin nadjem 'workaround' u vezi ovoga.
Bilo koja ideja bi bila od velike pomoci.


 
Odgovor na temu

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.135.*

Sajt: nemam ja to


Profil

icon Re: Sortiranje i Distinct funkcija13.02.2009. u 23:02 - pre 184 meseci

Da li ste probali da uradite

Code:

select distinct b.id from  A a , B b  where b.id = a.b_id  order by 1;


Gdije broj 1 (jedan) predstavlja redni broj koline
Čak i više kolina možete naredati naprimeejr
Code:

Order by 3,1


Ili da koristite alijas kolanoa pa kažete
Code:

select distinct b.id AS ADO from  A a , B b  where b.id = a.b_id  order by Ado


Ili da u orderu navedete ponovo kompletnu funkciju
Code:

select distinct b.id from  A a , B b  where b.id = a.b_id  order by distinct b.id;


Koliko ja znam order by se ne može koristi jao subquery možda je tu greška

ne možete reći

Code:

select * from 
(select distinct b.id from  A a , B b  where b.id = a.b_id  order by 1) as tmp1


Morate koirstii

Code:

select * from 
(select top(100)  precent distinct b.id from  A a , B b  where b.id = a.b_id  order by 1) as tmp1


Ali ovo će vam pojesti enormno preformanse

Lijep pozdrav


S poštovanjem
 
Odgovor na temu

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.135.*

Sajt: nemam ja to


Profil

icon Re: Sortiranje i Distinct funkcija13.02.2009. u 23:10 - pre 184 meseci

U ne viđoh
Pa vi trebate složiti po koloni koja nije navedena u select.
Zašto jednostavno ne navedete u selectu i tu kolonu po kojoj hoćete da uradite sort
S poštovanjem
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Sortiranje i Distinct funkcija13.02.2009. u 23:24 - pre 184 meseci
Ta greska je tu sa razlogom. Da ne bih izmisljao toplu vodu, baci pogleda na ovaj blog:

Code:
Letter  Value
----    -----    
A       1
A       1
B       3
B       0
C       2


Look carefully at the above, and think about what should be returned when asking for distinct Letters ordered by Value.  

The answer is .... there is no correct answer!  B contains a value of both 0 and 3, so should it appear first, or should it appear last?  The answer is -- who knows?! 
It is not specified when simply asking for distinct Letters ordered by Value.   It is not a clear, complete, deterministic question that you are asking SQL Server to
answer; it is like asking someone "what color is it when you add 4 and 3?"  -- the question makes no sense and cannot be conclusively answered as stated.


Kazes da radi pod mySQL-om, pitam se sta bi on vratio za gornji set.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Arbitar2
Arbitar2
Serbia

Član broj: 51869
Poruke: 39
*.dynamic.sbb.rs.



Profil

icon Re: Sortiranje i Distinct funkcija14.02.2009. u 20:02 - pre 184 meseci
Evo kako radi u MySQL:

Code:


mysql> select * from A;
+----+------+
| id | name |
+----+------+
|  1 | a1   |
|  2 | a2   |
|  3 | a3   |
|  4 | a1   |
+----+------+

mysql> select * from B;
+----+------+------+
| id | name | a_id |
+----+------+------+
|  1 | b1   |    1 |
|  2 | b2   |    2 |
|  3 | b3   |    3 |
|  4 | b1   |    1 |
+----+------+------+



i rezultat je :

Code:


mysql> SELECT distinct(a.name) FROM B as b join A as a on b.a_id = a.id order by a.id;
+------+
| name |
+------+
| a1   |
| a2   |
| a3   |
+------+



Razlog sto ne mogu da dodam jos jednu kolonu je zato sto koristim ORM Hibernate framework(hql), a koji vraca citav objekat recimo iz table :

Code:


 select  b from BusinessUnit b where  b.name like :name


Ovo je samo uproscen oblik sql(sudeci po tome da manje ljudi zna ORM Hibernate framework). Razmisljao sam ako neko moze da mi resenje u obicnom sql onda nije problem da ga prebacim u hql.Bitna je sustina.
Ukoliko bi dodao jos jedanu kolonu u select statement onda bi mi se vracao niz u nizu objekata, sto je nelogicno jer aplikacija se vec koristi i funkcije rade na MySql-u. U tom slucaju bi morao da menjam preko min 1000 redova koda sto je neizvodljivo.
Ovo mi je veoma bitno jer musterije traze da se aplikacija prebaci na MS SQL.

Hvala jos jednom.
 
Odgovor na temu

retry
Beograd

Član broj: 39405
Poruke: 95
*.adsl.verat.net.



Profil

icon Re: Sortiranje i Distinct funkcija14.02.2009. u 23:56 - pre 184 meseci
vidi dal ti ovo radi posao:
Code:

SELECT a.name FROM B as b join A as a on b.a_id = a.id group by a.name order by min(a.id)

pozdrav.
 
Odgovor na temu

[es] :: MS SQL :: Sortiranje i Distinct funkcija

[ Pregleda: 2994 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.