[SQL] CASE WHEN; gebruik van alias mogelijk binnen syntax?

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

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
In een bepaalde SQL-query (mySQL) maak ik gebruik van 'CASE WHEN'.

Voorbeeld:

SQL:
1
2
3
4
5
6
7
8
9
SELECT
     (CASE WHEN (
          (veld1 + veld2 + veld3) / veld4
     ) > '0' THEN
          (veld1 + veld2 + veld3) / veld4
     ELSE '0' END) AS sum1
FROM
     tabel1
;


Is het mogelijk om binnen de CASE WHEN syntax een soort alias te gebruiken? Iets als dit:

SQL:
1
2
3
4
5
6
7
8
SELECT
     (CASE WHEN (
          (veld1 + veld2 + veld3) / veld4 AS sumvelden
     ) > '0' THEN
          sumvelden
     ELSE '0' END) AS sum1
FROM
     tabel1


In de echte situatie is de berekening ((veld1 + veld2 + veld3) / veld4) vele malen groter, complexer en langer. Naar mijn idee wordt de query onnodig lang als de berekening er twee maal in staat; eerst voor de check of deze groter dan 0 is en vervolgens om het resultaat te tonen.

Is dit te voorkomen?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je kun wellicht een in-line view gebruiken:
code:
1
2
select (case when sumvelden > 0 ...
from (select (veld1 + veld2 + veld3) / veld4 as sumvelden ...

Who is John Galt?


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Je wilt dus afhankelijk van een conditie een andere alias?

Dat kan niet. :)

Waarom niet? Nou, omdat het tegen alle principes van verzamelingenleer indruist. Kolommen hebben namelijk één naam en één datatype en één lengte, etc. Dus niet per rij verschillend.

Wat wil je er overigens mee bereiken? Dat een kolom per rij een andere naam heeft? 8)7

Fat Pizza's pizza, they are big and they are cheezy


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 15-02 17:57
Nee, hij wil de berekening in zijn CASE alvast aliassen, zodat hij he niet 2x in zijn query hoeft op te nemen.

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Oei, sorry. Ik keek over die tweede sumvelden heen. :Z Maar dan nog, is het volgens mij op die manier niet toegestaan. Ik zou eerder aan een subquery denken.

Fat Pizza's pizza, they are big and they are cheezy


  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 22-12-2025

PhysicsRules

Dux: Linux voor Eenden

Heeft MySQL user-defined functions? In MS-SQL kun je een functie definieëren en die dan aanroepen.

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE FUNCTION mijnFormule(
@veld 1 int,
@veld 2 int
@veld 3 int
@veld 4 int)
RETURNS INT
AS
Set @temp int

BEGIN
    @temp =  (veld1 + veld2 + veld3) / veld4 

    CASE WHEN @temp> 0 
        RETURN @temp
    ELSE
        RETURN 0
    END
END

en dan
SQL:
1
2
SELECT (mijnFormule(veld1, veld2, veld3, veld4) as sum1
FROM  tabel1;

[ Voor 45% gewijzigd door PhysicsRules op 07-07-2006 09:03 ]

Pagina: 1