2017-05-29 4 views
1

Guten Morgen,Abfrage berechnen Lager beginnen, Lager in, Lager heraus, Lager Gleichgewicht in MYSQL von controling Inflation (Erhöhung, steigen, steigen) der Einheit Preis

ich eine MySQL-Datenbank haben, die drei Tabellen enthält:

  1. Produkttabelle

enter image description here

  1. stockin Tabelle

enter image description here

  1. stockout Tabelle

enter image description here

Und ich habe die folgende Abfrage, die gut funktioniert, und es hilft mir das zu erzeugen, Legder Bericht auf Bild 4 unten:

SELECT 
    Product.Product_Code, 
    Product.Product_Color, 
    Product.Product_Model, 
    IFNull(QtyBeginningStockIn.Qty_In, 0)-IFNull(QtyBeginningStockOut.Qty_Out, 0) QtyBeginningStock, 
    IFNull(UntyBeginningStockIn.Uprice_In, 0) UntyBeginningStock, 
    IFNull(BeginningStockIn.Amount, 0)-IFNull(BeginningStockOut.Amount, 0) BeginningStock, 
IFNull(QtyPeriodStockIn.Qty_In, 0) QtyStockIn, 
IFNull(UntyPeriodStockIn.Uprice_In, 0) UntyStockIn, 
IFNull(PeriodStockIn.Amount, 0) StockIn, 
IFNull(QtyPeriodStockOut.Qty_Out, 0) QtyStockOut, 
IFNull(UntyPeriodStockOut.Uprice_Out, 0) UntyStockOut, 
IFNull(PeriodStockOut.Amount, 0) StockOut, 
IFNull(QtyBeginningStockIn.Qty_In, 0)-IFNull(QtyBeginningStockOut.Qty_Out, 0)+IFNull(QtyPeriodStockIn.Qty_In, 0)-IFNull(QtyPeriodStockOut.Qty_Out, 0) QtyStockBalance, 
IFNull(UntyclosingStockIn.Uprice_In, 0) UntyclosingStockIn, 
IFNull(BeginningStockIn.Amount, 0)-IFNull(BeginningStockOut.Amount, 0)+IFNull(PeriodStockIn.Amount, 0)-IFNull(PeriodStockOut.Amount, 0) StockBalance 
FROM Product 
LEFT JOIN 
(
    SELECT 
    SUM(Qty_In) Qty_In, 
    Product_Code 
    FROM StockIn 
    WHERE StockIn_Date < '2012/01/02' 
    group by Product_Code 
) QtyBeginningStockIn ON QtyBeginningStockIn.Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Qty_Out) Qty_Out, 
    Product_Code 
    FROM Stockout 
    WHERE StockOut_Date < '2012/01/02' 
    group by Product_Code 
) QtyBeginningStockOut ON QtyBeginningStockOut.Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    Uprice_In, 
    Product_Code 
    FROM StockIn 
    WHERE StockIn_Date < '2012/01/02' 
    group by Product_Code 
) UntyBeginningStockIn ON UntyBeginningStockIn.Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockIn 
    WHERE StockIn_Date < '2012/01/02' 
    group by Product_Code 
) BeginningStockIn ON BeginningStockIn.Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockOut 
    WHERE StockOut_Date < '2012/01/02' 
    group by Product_Code 
) BeginningStockOut ON BeginningStockOut.Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Qty_In) Qty_In, 
    Product_Code 
    FROM StockIn 
    WHERE StockIn_Date >= '2012/01/02' AND StockIn_Date < '2012/01/31' 
    group by Product_Code 
) QtyPeriodStockIn ON QtyPeriodStockIn .Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    Uprice_In, 
    Product_Code 
    FROM StockIn 
    WHERE StockIn_Date >= '2012/01/02' AND StockIn_Date < '2012/01/31' 
    group by Product_Code 
) UntyPeriodStockIn ON UntyPeriodStockIn .Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockIn 
    WHERE StockIn_Date >= '2012/01/02' AND StockIn_Date < '2012/01/31' 
    group by Product_Code 
) PeriodStockIn ON PeriodStockIn .Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Qty_Out) Qty_Out, 
    Product_Code 
    FROM Stockout 
    WHERE StockOut_Date >= '2012/01/02' AND StockOut_Date < '2012/01/31' 
    group by Product_Code 
) QtyPeriodStockOut ON QtyPeriodStockOut .Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    Uprice_Out, 
    Product_Code 
    FROM Stockout 
    WHERE StockOut_Date >= '2012/01/02' AND StockOut_Date < '2012/01/31' 
    group by Product_Code 
) UntyPeriodStockOut ON UntyPeriodStockOut .Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    SUM(Amount) Amount, 
    Product_Code 
    FROM StockOut 
    WHERE StockOut_Date >= '2012/01/02' AND StockOut_Date < '2012/01/31' 
    group by Product_Code 
) PeriodStockOut ON PeriodStockOut.Product_Code = Product.Product_Code 
LEFT JOIN 
(
    SELECT 
    Uprice_In, 
    Product_Code 
    FROM StockIn 
    WHERE StockIn_Date < '2012/01/02' 
    group by Product_Code 
) UntyclosingStockIn ON UntyclosingStockIn.Product_Code = Product.Product_Code 
  1. Ledger Bericht

    enter image description here

Und meine Frage ist, ist es möglich, einen Ledger Bericht zu erzeugen, die alle Transaktionen von Details anzeigen können Transaktionsdatum enthalten, anstatt Transaktion wie in meinem Bericht zusammenzufassen? Welche Abfrage kann ich verwenden? Danke

+0

Alles ist möglich –

+0

Sie benötigen ein exaktes erwartetes Ergebnis zu schaffen, und was Sie haben versucht, es zu achive. – Shadow

Antwort

0

Es ist möglich durch Union stockin und stockout Tabellen. Sie können auch negative und positive Werte für verschiedene Arten von Transaktionen verwenden. Zum Beispiel:

(SELECT StockIn_date AS `Date`, Product_code, Qty_In AS Qty, Uprice_In AS Uprice, Qty_In*Uprice_In AS Amount, 'StockIn' AS `Type` 
FROM stockin) 
UNION ALL 
(SELECT StockOut_date AS `Date`, Product_code, -Qty_Out AS Qty, Uprice_Out AS Uprice, -Qty_Out*Uprice_Out AS Amount, 'StockOut' AS `Type` 
FROM stockout) 
ORDER BY `Date`;