Question

Fondamentalement, ce dont j'ai besoin, c'est d'obtenir la somme de la multiplication de deux champs.

Par exemple: SUM ((field_1 or field_2) * field_3)

Mais field_1 ou field_2 sont sélectionnés en fonction de la valeur d'un quatrième champ, field_4

Ma table:

field_1: Float
field_2: Float
field_3: Float
field_4: Char

Bref, ce dont j'ai besoin, c'est quelque chose comme ceci:

SELECT
...
IF field_4 = 'K'
THEN
    SUM( field_1 * field_3 )
ELSE
    SUM( field_2 * field_3 )

J'ai essayé avec IF et des instructions de cas, mais je ne peux pas le faire fonctionner. Ici ma vraie requête:

SELECT  
    D.id,
    D.name,
    SUM(CASE WHEN D.sale_unity = 'K' 
        THEN (D.cost_price * CI.quantity_k)
        ELSE (D.cost_price * CI.quantity_u) ) AS total_cost,
    SUM(CASE WHEN D.sale_unity = 'K' 
        THEN (D.sale_price * CI.quantity_k)
        ELSE (D.sale_price * CI.quantity_u) ) AS net
FROM DETAIL D
INNER JOIN VOUCHER AS V ON V.id = D.voucher_id
WHERE V.client_id = 97 AND V.date BETWEEN '06/01/2012' AND '07/01/2012'
GROUP BY D.id, D.name 
Était-ce utile?

La solution

Je pense que ce qui ne va pas sur votre requête, c'est que votre déclaration de cas manque la fin. Essaye ça:

SELECT  
    D.id,
    D.name,
    SUM(CASE WHEN D.sale_unity = 'K' 
        THEN (D.cost_price * CI.quantity_k)
        ELSE (D.cost_price * CI.quantity_u) END ) AS total_cost,
    SUM(CASE WHEN D.sale_unity = 'K' 
        THEN (D.sale_price * CI.quantity_k)
        ELSE (D.sale_price * CI.quantity_u) END ) AS net
FROM DETAIL D
INNER JOIN VOUCHER AS V ON V.id = D.voucher_id
WHERE V.client_id = 97 AND V.date BETWEEN '06/01/2012' AND '07/01/2012'
GROUP BY D.id, D.name 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top