2010-05-24 4 views
0

J'ai une table appelée factures:aide de la requête mysql, prendre somme totale d'une table, et basée sur la valeur de réduction sur une autre table calculer la gross_total

`si_invoices` (
    `id` int(10) , 
    `biller_id` int(10) , 
    `customer_id` int(10) , 
    `type_id` int(10) , 
    `inv_tax_id` int(10) , 
    `date` date , 
    `unreg_customer` tinyint(1) , 
    `discount` decimal(10,2) , 
    `discount_type` tinyint(1) 
) 

chaque facture a des éléments qui sont stockés dans la table invoice_items:

`si_invoice_items` (
    `id` int(10) , 
    `invoice_id` int(10) , 
    `quantity` int(10) , 
    `product_id` int(10) , 
    `warehouse_id` int(10) , 
    `unit_price` decimal(25,2) , 
    `total` decimal(25,2) , 
    `description` text 
) ; 

et table d'impôt

`si_tax` (
    `tax_id` int(11), 
    `tax_description` varchar(50) , 
    `tax_percentage` decimal(25,6) , 
    `type` varchar(1), 
    `tax_enabled` varchar(1) 
) ; 

voici ce que je veux faire
étape 1: obtenir le sum_total des articles de facture pour une facture speciefic
étape 2: calculer la réduction, dans le tableau de la facture que j'ai un champ discount_type:
si son égal à 0, alors il y aura soit pas de réduction si son
égal à 1, la valeur de remise sera stocké dans le champ d'actualisation
si son égal à 2, la réduction est un pourcentage de sum_total

étape 3: calculat e les taxes basées sur inv_tax_id
basé sur l'identification fiscale, je regarderai dans le tableau fiscal, obtenir le tax_percentage et le multiplier par le (sum_total - réduction)

bref voici l'équation
$ gross_total = $ sum_total - disount de $ + taxes

+0

J'étais enclin à répondre à votre question, mais j'ai remarqué que vous n'avez jamais accepté une réponse. J'ai jeté un coup d'oeil rapide, et il a semblé qu'au moins un ou deux aurait pu être marqué comme répondu. Quoi qu'il en soit, je suis sûr que quelqu'un répondra à cette question pour vous aussi, mais s'il vous plaît pensez à examiner vos questions précédentes quand vous avez une chance. –

+0

comment puis-je accepter une réponse ?, chaque fois que je vois une réponse appropriée je clique sur la flèche haut, je vais vérifier pour voir comment accepter une réponse – vegatron

+0

Ok, maintenant je l'obtiens, cliquez sur l'image sous les flèches, j'ai accepté mes réponses – vegatron

Répondre

0

ENFIN !!!!! Je l'ai à travailler

ici est la requête:

 SELECT sum(iv.inv_total - iv.inv_discount + iv.taxes) FROM 
(
SELECT 
     (SELECT sum(ii.total) FROM si_invoice_items ii 
      where ii.invoice_id = v.id) as inv_total , 
     (
      SELECT 
       CASE v.discount_type 
        WHEN 1 THEN v.discount 
        WHEN 2 THEN (v.discount/100) * (SELECT inv_total) 
        ELSE 0 
       END 
     ) AS inv_discount, 

     (SELECT 
      CASE t.type 
       WHEN '$' THEN t.tax_percentage 
       WHEN '%' THEN (t.tax_percentage/100) * (SELECT inv_total - inv_discount) 
       ELSE 0 
      END 
     FROM si_tax as t 
     WHERE t.tax_id = inv_tax_id 
     ) AS taxes 


    FROM 
     si_invoices v 
    ) iv 

élégant, sa beauté est-elle pas ..: D

grâce Arnie Je vous remercie de votre aide, et Mike Pelley il aurait été mieux si vous avez donné un commentaire positif ou un peu d'aide plutôt que d'agir comme "homme de la loi"

+0

Je n'essayais pas d'agir comme un «homme de la loi» - je voulais juste vous dire pourquoi j'ai décidé de passer à autre chose. Il faut un peu de temps pour répondre aux questions, et il y a plus de questions que de temps. Plutôt que de partir silencieusement, j'ai pensé que je vous ferais savoir au cas où cela vous aiderait à avoir plus de réponses dans le futur. –

0

Je ne sais pas pourquoi vous voulez faire cela dans MySQL, mais voici la requête:

SELECT (SELECT `tax_percentage` FROM `si_tax` WHERE `tax_id` = `si_invoices`.`inv_tax_id`) * (`sum_total` - CASE `discount_type` WHEN 1 THEN `discount` WHEN 2 THEN `sum_total` * `discount`/100 ELSE 0 END) AS `gross` 
FROM `si_invoices` 
JOIN (SELECT SUM(`total`) AS `sum_total` FROM `si_invoice_items` WHERE `invoice_id` = `si_invoices`.`id`) AS `t` 
WHERE `id` = ? 
+0

merci beaucoup MrArnie la raison pour laquelle je veux tout faire dans mysql est parce que j'utilise la bibliothèque de phpreports qui prend seulement une question et l'exécute et place le résultat dans le dossier de xml. J'ai essayé votre requête, j'ai eu une erreur donc je l'ai changé, alors j'ai le brut = 0x – vegatron

+0

SELECT (SELECT 'tax_percentage' FROM 'si_tax' WHERE' tax_id' = 'si_invoices'.'inv_tax_id') * ('sum_total' - CASE' discount_type' QUAND 1 PUIS 'discount' QUAND 2 THEN' sum_total' * 'discount'/100 ELSE 0 END) AS' gross' DE 'si_invoices' JOIN (SELECT SOMME (' total') AS '' sum_total' dE si_invoice_items', '' si_invoices' ii Où invoice_id' = ii.id) AS '' t' OU id' = 21 [/ code] – vegatron

+0

Je suis venu avec cette SELECT \t \t (SELECT somme (ii.total) FROM si_invoice_items ii \t \t \t où ii.invoice_id = v.id) comme inv_total, \t \t ( \t \t \t SELECT \t \t \t \t CASE v.discount_type \t \t \t \t \t QUAND 1 THEN v.discount \t \t \t \t \t QUAND 2 PUIS (v.discount/100) * (SELECT inv_total) \t \t \t \t \t ELSE 0 \t \t \t \t FIN \t \t) AS inv_discount, \t \t (SELECT \t \t \t CASE t.type \t \t \t \t QUAND '$' ALORS t.tax_percentage \t \t \t \t QUAND '%' ALORS (t.tax_percentage/100) * (SELECT inv_total - inv_di scount) \t \t \t \t AUTRE 0 \t \t \t END \t \t à partir de si_tax comme t \t \t OÙ t.tax_id = inv_tax_id \t \t) AS taxes \t \t, somme SELECT (inv_total) DE \t si_invoices v mais je veux obtenir 1 rangée! – vegatron

Questions connexes