Toon posts:

[SQL] minimum van 0, of groter voor expressie

Pagina: 1
Acties:
  • 109 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een select query die een ORDER BY doet volgens een simpele expressie (2 kolommen van elkaar aftrekken).

select iets from TABEL ORDER BY (kolom1 - kolom2)

Wat ik wil is dat zodra kolom2 GROTER is dan kolom 1, de expressie (kolom1 - kolom2) gewoon 0 weergeeft, zodat er een tweede orderby expressie kan beginnen te werken!!

ik dacht aan ceiling, of Min, maar beiden zijn aggregate functies :')

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 16:30

Janoz

Moderator Devschuur®

!litemod

Wat dacht je van
code:
1
MAX(0,(kolom1-kolom2))

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Server: Msg 174, Level 15, State 1, Line 1
The MAX function requires 1 arguments.

|:

Max is een aggregate functie, die volgens mij dus de gehele kolom pakt.. maw. wat max wil doen is de maximale waarde uit 1 kolom halen... terwijl ik bezig ben per row

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Kan je dit niet op een andere manier oplossen ?

Bijvoorbeeld in een aparte entry van de select ... (kolom1 - kolom2) as iets ...

met eventueel een if-then-else statement (indien mogelijk in je DB) erbij?

of zoiets:
select ((kolom1 - kolom2) > 0) as iets, (kolom1 - kolom2) as ietsanders ... order by iets, ietsanders


Maar misschien is het handiger om je statements wat aan te passen ?
Of in je "taal eromheen" te sorteren?
Of iets als een view te maken?

Verwijderd

Topicstarter
nopes.. if then else ook geprobeerd. Ook dan wordt er een aggregate gedaan.. hij zegt: subquery resulted in multiple results...

Ik gebruik overigens sql server 2k. Een view is niet mogelijk, aangezien dit een high traffic site wordt.

Ik zelf zit te denken aan cursors, maar juist daar weet ik niks van af. :?

edit: wat bedoel je met: in mijn taal eromheen sorteren?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op vrijdag 23 november 2001 13:46 schreef The_Shark het volgende:
nopes.. if then else ook geprobeerd. Ook dan wordt er een aggregate gedaan.. hij zegt: subquery resulted in multiple results...
Sja, je moet natuurlijk zoveel mogelijk van je rekenwerk in de select doen, lijkt me?
Ik zelf zit te denken aan cursors, maar juist daar weet ik niks van af. :?

edit: wat bedoel je met: in mijn taal eromheen sorteren?
Cursors? Sja, ik weet daar ook weinig vanaf :)

En met de taal erom, bedoel ik bijv dat je alles in asp krijgt en een bepaalde waarde wel of niet op een bepaalde plek toont.

Verwijderd

Topicstarter
yep, alles in 1 select als het kan =]

En het gaat om de order waarin iets terugkomt uit de tabel.. dus kan er niet omheen werken.. he bah!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 08:12

Crazy D

I think we should take a look.

Correct me if I'm wrong, maar volgens mij waren views juist zo handig, o.a. vanwege snelheid?
Naja maakt ook niet uit...

Als ik het goed begrijp wil je iets als
code:
1
2
3
4
5
6
7
select *
from tabelletje

if kolom2 > kolom2
    order by 0
else
    order by (kolom1 - kolom2)

toch :?
Volgens mij kan dat wel met een select case stukje, volgens mij kan je die ook in een voorwaarde gebruiken
(ff uit m'n hoofd dus t zal wel staat vol syntax errors staan :P)
code:
1
2
3
4
5
order by 
    case when kolom2 > kolom1
      0
    case else
      (kolom1 - kolom2)

Ik zit nu ff bammetjes te eten, en dus met 1 handje te typen, als je er niet uitkomt wil ik zo wel ff kijken of ik het hier werkend kan krijgen...

PS En aangezien er na de laatste case nog een end hoort, kun je daarna gewoon meer kolommen opgegeven om op te orderen.

Exact expert nodig?


Verwijderd

Topicstarter
w8 up.. dat ga ik uitproberen! =]]]

Verwijderd

Topicstarter
ehe :?
als je het zou willen proberen zou ik jou toch wel behoorlijk dankbaar zijn.

Hier kom ik er nog niet uit

Verwijderd

Topicstarter
hell yeah!!!!!! >:)

dat was het winnende antwoord..
opgelost met iets als:

select pid,(aim-u_out) as target from partner order by
case
when (aim-u_out) > 0 then '(aim-u_out)'
when (aim-u_out) < 0 then 'pid asc'
end

deze test werkt. dus dan kom ik er wel uit.
echt MEGA thanks.. dit helpt me errug veel

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 08:12

Crazy D

I think we should take a look.

Op vrijdag 23 november 2001 15:43 schreef The_Shark het volgende:
hell yeah!!!!!! >:)

dat was het winnende antwoord..
Ok, je hebt m'n adres om de koelkast te laten bezorgen? :D

Exact expert nodig?


Verwijderd

Topicstarter
nopes, ik juich te vroeg.

haha.. kom net terug, met goede moed begonnen. maar het haalt niks uit. Die hele case neemt ie niet mee! :?

edit: i wasn't thinking
je kan een kolom alleen maar OF sorteren, of niet.. dus je kan niet een subset sorteren. tenminste, dat denk ik na wat getest.. |:(
Pagina: 1