Jump to content

SQL Abfrage - Artikel - Verkauf im Jahr


MarcoFuerte

Recommended Posts

Hallo zusammen, ich möchte gerne eine SQL Abfrage machen die mir folgende Informationen anzeigt.

NAME PRODUKT / ARTIKELNUMMER / AKTUELLER LAGERBESTAND  / VERKAUFTE MENGE DER LETZTEN 365 TAGE  / *optional* BESTELLVORSCHLAG FÜR 365TAGE  (VERKAUFTE MENGE - AKTUELLER LAGERBESTAND + 10%)

Es scheitert bei mir an der VERKAUFTEN MENGE DER LETZTEN 365 TAGE ..

der Bestellvorschlag wäre optional noch ganz gut aber nicht zwingend nötig....

das was ich bist jetzt habe ist folgendes :

____________________________________________________________________________________________________________________

SELECT
                                 b.`name` AS `PRODUKT`, `reference`AS `ART.NO`,    sav.`quantity` AS `LAGERBESTAND`

            FROM `ps_product` a
            LEFT JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1)
            
        LEFT JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product` AND sav.`id_product_attribute` = 0
         AND sav.id_shop = 1  AND sav.id_shop_group = 0 )  JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default)
                LEFT JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default)
                LEFT JOIN `ps_shop` shop ON (shop.id_shop = a.id_shop_default)
                LEFT JOIN `ps_image_shop` image_shop ON (image_shop.`id_product` = a.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = a.id_shop_default)
                LEFT JOIN `ps_image` i ON (i.`id_image` = image_shop.`id_image`)
                LEFT JOIN `ps_product_download` pd ON (pd.`id_product` = a.`id_product` AND pd.`active` = 1)
             WHERE 1   AND cl.`name` LIKE '%alle%'
            
             ORDER BY  sav.`quantity` ASC

____________________________________________________________________________________________________________________

 

Kann mir jemand behliflich sein bein erstellen der SQL Abfrage?

Marco

PS 1.6.1.20

 

Link to comment
Share on other sites

Hallo SliderFlash,

danke für deine Info, aber mit Office ( und alternativen) möchte ich in diesm fall nicht nutzen.

Ich bestelle in 12Monate Zyklen meine Artikel,  aktuell mach  ich das über die PS  Beliebteste Artikel  - Statistik, - CSV Export und dann den Rest über Office.

Ich hätte aber gerne die Funktion direkt als SQL Abfrage,

 

z.b. Hersteller ruft mich an und ich drücke einen Kopf und kann Ihm sagen was ich brauche und wieviel ( 365 Tage +10% ) 

Meine Formel lautet : (VERKAUFTE STÜCKZAHL LETZTEN 365 TAGE  -  AKTUELLER LAGERBESTAND)  *1,10

 

dafür benötige ich aber entweder die Menge der verkauften Artikel übers Jahr oder den Tagesschnitt bzw. beides ( aktuell bekomme ich diese Info über die Statistik) ... und es dauter relativ lange bei mehreren Artikeln. Klar kann ich die Liste aus PS  ziehen und dann in Office als CSV importieren die Formel reinhacken und dann suchen was ich benötige. Die andere Lösung wäre das die Abfrage alles für mich erledigt .

Diese SQL Abfrage  dann sehr hilfreich und schnell.

Marco

 

Link to comment
Share on other sites

Wenn dir gar nichts einfällt, kannst du date_add <= Endedatum AND date_add >= Beginndatum als Bedingung einsetzen. Aber funktionieren wird die SQL-Abfrage schon deswegen nicht, weil die Tabellen nicht alle miteinander verknüpft sind. Das würde nur Fehlermeldungen hageln. Gibt es z.B. einen Grund, warum du unbedingt die Artikelbilder mit einbeziehen willst. Die sind doch für die Fragestellung irrelevant.

 

Link to comment
Share on other sites

Hallo Wuschel,

Das mit den Artikelbildern hab ich noch nicht rausgenommen gehabt ..

 

 

Ich bin schon etwas weiter ... 

bis dato und bereinigt sieht es so aus :

_______________________________________________________________

SELECT
                a.id_product,  sum(x.quantity) AS 'sold',  round(sum(x.quantity) * 1.10 ) AS 'Vorschlag',        b.`name` AS `PRODUKT`, `reference`AS `ART.NO`, cl.name as 'cat',   sav.`quantity` AS `LAGERBESTAND`

            FROM `ps_product` a
          JOIN ps_product_sale x ON (x.id_product = a.id_product)
            JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1)
            JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default)
        JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3)
              JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product`)  
            WHERE x.date_upd between date_sub(now(),interval 365 day) AND now()
             GROUP BY a.id_product  
             ORDER BY  sav.`quantity` ASC  

 

______________________________________________________________

 

Marco

 

Link to comment
Share on other sites

Sorry ... war gestern schon im bett ...

hab es fertig .. falls jemand sowas gebrauchen kann dann hier :

ggf. interval und kategorie ändern ...

z.b. hier auf 90 day     und dann auch  IDEAL 3M   -

 

_________________________________________________________________________________________________________________________

SELECT
                a.id_product, a.`reference`AS 'ART.NO', b.`name` AS 'PRODUKT',  sav.`quantity` AS 'AKTUELLER LAGERBESTAND', sum(d.product_quantity) AS 'VERKAUFT',  round(sum(d.product_quantity) * 1.10 ) - sav.quantity  AS 'IDEAL 3M',   cl.name as 'KATEGORIE'
            FROM ps_order_detail d
            JOIN ps_orders x ON ( d.id_order = x.id_order AND (x.`date_add` BETWEEN  date_sub(now(), interval 90 day) AND now() )  )
            JOIN `ps_product` a ON (d.product_id = a.id_product)
        
            JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1)
            JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default)
        JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3)
             JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product`)
          
             GROUP BY a.id_product  
             ORDER BY  sav.`quantity` ASC 

_______________________________________________________________________________________________________________________________

 

Danke Marco

Edited by MarcoFuerte (see edit history)
Link to comment
Share on other sites

Du musst die

1. Kategorie anpassen ...

2. Intervall auf Tage einstellen ...

3. Bezeichnung 3Monate oder was auch Immer anpassen ...

Fertig ...

 

Hier die neueste Version :

SELECT
                a.id_product, a.`reference`AS 'ART.NO', sa.`active`AS `AKTIV`,  b.`name` AS 'PRODUKT',  sav.`quantity` AS 'AUF LAGER', sum(d.product_quantity) AS 'VERKAUFT 12M',  round(sum(d.product_quantity) * 1.10 ) - sav.quantity  AS 'IDEAL 12M',  a.`wholesale_price` AS `EK NETTO`,  a.`price` AS `VK NETTO`,  cl.name as 'KATEGORIE'
            FROM ps_order_detail d
            JOIN ps_orders x ON ( d.id_order = x.id_order AND (x.`date_add` BETWEEN  date_sub(now(), interval 365 day) AND now() )  )
            JOIN `ps_product` a ON (d.product_id = a.id_product)
        
            JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1)
            JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default)
        JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3)
             JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product`)
          
             GROUP BY a.id_product  
             ORDER BY  sav.`quantity` ASC 

 

Mach jetzt noch das letzte Verkaufsdatum eines Produktes rein ...  meine Final version kommt dann ..

 

LG Marco

Link to comment
Share on other sites

34 minutes ago, SliderFlash said:

und wo wird es ausgegeben bzw. angezeigt ?

Du solltest bei PS eine neue SQL Abfrage erstellen - Kode reinkopieren ... Fertig ... Danach kannst du dir das direkt in PS anzeigen lassen oder per CSV in Excel anzeigen lassen ..

Sorry Tastatur spinnt gerade .. Deshalb alles gross Buchstaben ..

Edited by selectshop.at
mass capital letters removed (see edit history)
Link to comment
Share on other sites

SO HIER MEINE FILANLE VERSION ....

SELECT
                a.id_product, a.`reference`AS 'ART.NO', sa.`active`AS `AKTIV`,  b.`name` AS 'PRODUKT',  sav.`quantity` AS 'AUF LAGER', sum(d.product_quantity) AS 'VERKAUFT 12M', max(x.date_add) AS 'LETZER VERKAUF',  round(sum(d.product_quantity) * 1.10 ) - sav.quantity  AS 'IDEAL 12M',  a.`wholesale_price` AS `EK NETTO`,  a.`price` AS `VK NETTO`,  cl.name as 'KATEGORIE'
            FROM ps_order_detail d
            JOIN ps_orders x ON ( d.id_order = x.id_order AND (x.`date_add` BETWEEN  date_sub(now(), interval 365 day) AND now() )  )
            JOIN `ps_product` a ON (d.product_id = a.id_product)
        
            JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1)
            JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default)
        JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3)
             JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product`)
          
             GROUP BY a.id_product  
             ORDER BY  sav.`quantity` ASC 

 

ICH DANKE ALLEN DIE MIR HIER IM FORUM GEHOLFEN HABEN DIE ABFRAGE ZU ERSTELLEN  🙂

Link to comment
Share on other sites

FINALE VERSION - MIT LAGERREICHWEITEN VORHERSAGE (ca.) in TAGEN UND MONATEN & EK BESTELLWERT pro PROUKT  ...

1. für andere Intervalle unten die:   interval 365 day" auf Tage ändern.

2. für andere Warengruppen die cl.id_category (aktuell 3) auf eure Kategorie ändern  : JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3)

3. wenn Ihr keine Kategorien braucht sondern alles sehen wollt dann löscht folgendes :  AND cl.id_shop = a.id_shop_default and cl.id_category = 3

_________________________________________________________________________________________________________________________________

SELECT
                
a.id_product AS 'ID',
a.`reference`AS 'ART.NO',
sa.`active`AS `AKTIV`,  
b.`name` AS 'PRODUKT',  
sav.`quantity` AS 'AUF LAGER',
sum(d.product_quantity) AS 'VERKAUFT 12M',

(sum(d.product_quantity) / 365 )  AS 'VERKAUF PRO TAG',  

round ((sav.quantity / (sum(d.product_quantity) /365)),1) AS 'REICHWEITE TAGE',  

round (((sav.quantity / (sum(d.product_quantity) /365)) /30),1) AS 'REICHWEITE MONAT',  


max(x.date_add) AS 'LETZER VERKAUF',

'BESTELLEN'  AS 'BESTELLEN FÜR ',
round((sum(d.product_quantity) * 1.10 ) - sav.quantity)   AS '12 MONATE',  
' € '  AS '. ',
round (a.wholesale_price,2)  AS 'STK -EK ',
' €  '  AS '   ',
round (((((sum(d.product_quantity) * 1.10 ) - sav.quantity)) * a.wholesale_price),2) AS 'BESTELLWERT'  


            FROM ps_order_detail d
            JOIN ps_orders x ON ( d.id_order = x.id_order AND (x.`date_add` BETWEEN  date_sub(now(), interval 365 day) AND now() )  )
            JOIN `ps_product` a ON (d.product_id = a.id_product)
        
            JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1)
            JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default)
        JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3)
             JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product`)
          
             GROUP BY a.id_product  
             ORDER BY  sav.`quantity` ASC 

 

____________________________________________________________________________________________________________

 

mich würde mal interessieren wer sowas ausser mir noch gebrauchen kann ...

LG Marco

Edited by MarcoFuerte (see edit history)
Link to comment
Share on other sites

  • 1 year later...

Hallo Marco

Deine Abfrage wäre super, nur leider kriege ich nicht heraus, wie die auch unter Presta 1.7.7.1 zum laufen kriege. Es erzeugt mir ein leeres Excel File. 

Hat jemande eine Idee was sich geändert hat an der DB?

Vielen Dank.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...