2017-09-22 7 views
0

je les tableaux ci-dessousPostgreSQL, les valeurs de changement après une limite est atteinte

ordres Réductions

id | employee | 
---|----------| 
1 |1   | 
2 |2   | 
3 |1   | 
4 |3   | 
5 |3   | 
6 |1   | 
7 |1   | 
8 |1   | 
9 |1   | 

Ailleurs j'ai le salaire des employés.

Ce que je veux faire est le suivant.

Si l'employé existe sur la table des commandes remises procédez comme suit:

-> 1 rang sur la Remise « Table des commandes de rabais » 30% de la valeur salariale et insérer 1 rang sur « tableau X » avec le montant de l'employee_id et la valeur de réduction.

-> 2 lignes dans le "tableau des remises" Rabais de 30% sur la valeur salariale et insère 2 lignes sur la "table X" avec le montant de l'employee_id et la valeur de remise.

-> 3 lignes sur le "tableau des remises" Rabais de 30% sur la valeur salariale et insère 3 lignes sur la "table X" avec le montant de l'employee_id et la valeur de remise.

-> 4 lignes sur le "tableau des escomptes" Rabais de 30% sur la valeur salariale et insère 3 lignes sur la "table X" avec le montant de la valeur employee_id et de la réduction (3 fois 30% salaire) La 4ème ligne insérée devrait être ony pour 10% (pour atteindre 100% du salaire)

->> 4 lignes sur la "table des ordres de remises" font le processus pour le cas ci-dessus et ignorer le reste. (Parce que vous ne pouvez pas escompter plus de 100% du salaire)

Si l'employé # 1 gagner 1000 $ et ont 10 lignes sur la « table des commandes de remises » la table X devrait ressembler à ceci

id | employee | discount_value | discounts_orders_id 
---|----------|----------------|-------------------- 
1 | 1  | 300   | 1 
2 | 1  | 300   | 3 
3 | 1  | 300   | 6 
4 | 1  | 100   | 7 

EDITED:

J'ai trouvé une solution temporelle.

insert into "table x" .... 
select (employee_salary * 0.30) from employee 
inner join discounts_orders .... 
limit 4 

I insert 4 lignes avec (salaire * 0,30) puis mettre à jour une rangée avec (salaire * 0,10)

+0

S'il vous plaît nous montrer quel code vous avez essayé jusqu'à présent! – AlexKoren

+0

Salut Alex, j'ai mis à jour le post, vous pouvez voir une solution temporelle, je parie qu'il y a une meilleure option. –

Répondre

0

je voudrais essayer de calculer la quantité d'entrées avec une sous-requête et ensuite décider du facteur avec un cas où:

insert into "table x" .... 
select (employee_salary * 
    (CASE WHEN (SELECT COUNT(*) FROM discounts_orders as dior 
      WHERE dior.employee=employee.id 
        AND dior.id<=discounts_orders.id) < 4 
     THEN 0.30 
     ELSE 0.10 
     END)) from employee 
inner join discounts_orders .... 
limit 4