2010-06-28 5 views
2

Essayer de le faire:Est-il possible d'utiliser CASE avec WHERE?

SELECT CASE WHEN field = true THEN one * another ELSE one END as case_field 
FROM table WHERE case_field >= 9000 

et recevoir une erreur qui ne case_field existe pas.

Est-il possible de le faire sans dupliquer CASE?

Répondre

7

Ressemble PostgresSQL soutient derived tables

SELECT * FROM 
(
SELECT CASE WHEN field = true THEN one * another ELSE one END as case_field 
FROM table 
) AS derived 
WHERE case_field >= 9000 

Vous pouvez vérifier qu'il n'a pas d'effet négatif sur le plan d'exécution.

+0

@Milen - Vive la mise à jour le lien! –

0

Utilisez une table temporaire:

SELECT * 
FROM (
    SELECT 
     CASE WHEN field = true THEN one * another 
     ELSE one 
     END as case_field 
     FROM table 
    ) a 
WHERE a.case_field >= 9000 
+4

Ce n'est pas une table temporaire, c'est une sous-requête. –