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

Dinamicki ORDER BY

[es] :: MS SQL :: Dinamicki ORDER BY

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ads

Član broj: 127796
Poruke: 13
213.244.208.*



Profil

icon Dinamicki ORDER BY14.01.2007. u 12:40 - pre 177 meseci
Radim u SQL Server-u 2005 i imam jednu ovakvu tabelu :)

Code:

CREATE TABLE Boje
(
    Id INT, 
    Opis VARCHAR(20)
)

INSERT INTO Boje VALUES (1, 'Bela')
INSERT INTO Boje VALUES (2, 'Plava')
INSERT INTO Boje VALUES (3, 'Zuta')
INSERT INTO Boje VALUES (4, 'Crvena')
INSERT INTO Boje VALUES (5, 'Zelena')


I sad hocu dinamicki da pravim ORDER BY klauzulu u zavinosti od ulaznog parametra stored procedure. Na google sam nasao samo ovaj nacin za to. Na primer hocu da sortiram po koloni Opis.

Code:

DECLARE @kolona VARCHAR(4)
SET @kolona = 'Opis'
SELECT Id, Opis
FROM Boje
ORDER BY
          CASE @kolona 
            WHEN 'Id' THEN Id
            WHEN 'Opis' THEN Opis
          END


Vraca mi gresku
''Conversion failed when converting the varchar value 'Bela' to data type int''

Ukoliko su sve kolone u CASE po kojima je moguce sortirati istog tipa, onda radi lepo, ali meni treba u kombinaciji sa INT, MONEY pa i BIT ako moze.

Zanmiljivo je da ukoliko je kombinacija VARCHAR i MONEY poruka je jos neodredjenija
''Cannot convert a char value to money. The char value has incorrect syntax.''

Da li postoji neko drugo resenje? Molim za pomoc.

Code:

DROP TABLE Boje

 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
217.169.219.*

Jabber: DarkMan


Profil

icon Re: Dinamicki ORDER BY14.01.2007. u 13:00 - pre 177 meseci
A da u case-u konvertujes sve u isti tip? Probaj da li moze ovako:
Code:

DECLARE @kolona VARCHAR(4)
SET @kolona = 'Opis'
SELECT Id, Opis
FROM Boje
ORDER BY
          CASE @kolona 
            WHEN 'Id' THEN convert(varchar,Id)
            WHEN 'Opis' THEN convert(varchar,Opis)
          END

 
Odgovor na temu

dekibre
Dejan Mladenovic
Oslo, Norveska

Član broj: 21820
Poruke: 246
82.208.195.*

Sajt: dekibre.on.w802.net/index..


+4 Profil

icon Re: Dinamicki ORDER BY14.01.2007. u 13:53 - pre 177 meseci
Ja sam to u SQL 2000 rešavao na drugi način probaj da li to radi i na SQL 2005

Code:
DECLARE @kolona VARCHAR(4)
SET @kolona = 'Opis'

declare @sql = varchar(255)
set @sql ='SELECT Id, Opis FROM Boje ORDER BY '

if @kolona = 'Opis'
begin
       set @sql = @sql + 'Opis'
end
else if @kolona = 'Id'
begin
       set @sql = @sql + 'Id'
end

exec(@sql)


You can fool some people sometimes,
But you can't fool all the people all the time. (Bob Marley)
 
Odgovor na temu

ads

Član broj: 127796
Poruke: 13
213.244.209.*



Profil

icon Re: Dinamicki ORDER BY14.01.2007. u 14:39 - pre 177 meseci
Citat:
DarkMan: A da u case-u konvertujes sve u isti tip? Probaj da li moze ovako:
Code:

DECLARE @kolona VARCHAR(4)
SET @kolona = 'Opis'
SELECT Id, Opis
FROM Boje
ORDER BY
          CASE @kolona 
            WHEN 'Id' THEN convert(varchar,Id)
            WHEN 'Opis' THEN convert(varchar,Opis)
          END


Svaka cast, radi. :)
Ali izgleda da ne kapiram kako hehe. Nekako mi nije logicno ko kome tu sta castuje kada ORDER BY ocekuje samo naziv kolone.

Citat:
dekibre: Ja sam to u SQL 2000 rešavao na drugi način probaj da li to radi i na SQL 2005

Code:
DECLARE @kolona VARCHAR(4)
SET @kolona = 'Opis'

declare @sql = varchar(255)
set @sql ='SELECT Id, Opis FROM Boje ORDER BY '

if @kolona = 'Opis'
begin
       set @sql = @sql + 'Opis'
end
else if @kolona = 'Id'
begin
       set @sql = @sql + 'Id'
end

exec(@sql)



Hvala radi i ovo, mada ovo sam ustvari u startu odbacio jer mi to dodje isto kao da generisem SQL string u srednjem sloju, sto je ok ali sada su mi performanse jako bitne. Cak se plasim i za ovo castovanje koje mi DarkMan postovao. Sta mislite koliko koji nacin trosi resurse?
 
Odgovor na temu

ads

Član broj: 127796
Poruke: 13
213.244.209.*



Profil

icon Re: Dinamicki ORDER BY14.01.2007. u 14:55 - pre 177 meseci
Ups ipak nije resenje, kada konvertujem INT/MONEY mi sortira kao stringove. Sad cu da proguglam nesto oko trimovanja da dodam nule sa leve strane ako moze.
 
Odgovor na temu

BezPanike

Član broj: 128571
Poruke: 74



+2 Profil

icon Re: Dinamicki ORDER BY14.01.2007. u 17:59 - pre 177 meseci
Kada imaš kolone sa različitim tipovima podataka, ovo radi posao:
Code:

DECLARE @kolona VARCHAR(4)
SET @kolona = 'Id'

SELECT Id, Opis
FROM Boje
ORDER BY CASE @kolona WHEN 'Id' THEN Id ELSE NULL END,
         CASE @kolona WHEN 'Opis' THEN Opis ELSE NULL END
 
Odgovor na temu

[es] :: MS SQL :: Dinamicki ORDER BY

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

Postavi temu Odgovori

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