2017-03-06 76 views
0

我試圖解決這個問題已經有數週的時間了,但仍然沒有答案 我想顯示具有相同產品條形碼的inventory_table的總數量並顯示其項目描述。Mysql加上group_concat並加入表

我有三個表

product_table

ID| barcode | brand | unit | price 
1 | 1111111 | Neozep | Tablet | 5.50 
2 | 2222222 | Biogesic | Syrup | 7.50 

inventory_table

ID| batch | Total| barcode 
1 | 5555555 | 100 | 1111111 
2 | 6666666 | 500 | 1111111 

productcontains_table

ID| Name  | Amount | Type | barcode 
1 | Paracetamol | 250 | mg | 1111111 
2 | Amoxicilin | 20  | ml | 1111111 

和輸出應該是這樣的

Barcode | Item Description      | Price | Total Qty | Amount 
1111111 | Paracetamol 250 mg | Amoxicilin 20 ml | P5.50 | 600  | P3300 

我當前的SQL語句,但這顯然是錯誤的,希望你能幫助我的傢伙 由於事先

SELECT 
GROUP_CONCAT(DISTINCT productcontains_table.name ,' ', 
    productcontains_table.Amount,' ', 
    productcontains_table.Type 
    ORDER BY productcontains_table.IDno SEPARATOR ' | ') AS ItemDescription, 

    product_table.product_price AS Price, 
    SUM(inventory_table.inventory_total) AS TotalQuantity 

    product_table.price AS Price, 
    SUM(inventory_table.total) AS TotalQuantity, 
    product_table.price * SUM(inventory_table.total) AS TotalAmount 

    FROM inventory_table 
    JOIN product_table 
    ON product_table.barcode = inventory_table.barcode 
    JOIN productcontains_table 
    ON productcontains_table.barcode = product_table.barcode 

    GROUP BY inventory_table.barcode 
+0

在這裏缺少一個逗號'UMUM(inventory_table.inventory_total)AS TotalQuantity,' –

+0

是的,我只是忘了,但那是錯誤的。謝謝 – unknown

回答

1

修正了幾個錯別字:

SELECT inventory_table.barcode, 
    GROUP_CONCAT(DISTINCT productcontains_table.name,' ', productcontains_table.Amount,' ', productcontains_table.Type SEPARATOR ' | ') AS ItemDescription, 
    product_table.price AS Price, 
    SUM(inventory_table.total)/ b.cnt AS TotalQuantity, 
    product_table.price * SUM(inventory_table.total)/b.cnt AS Amount 
FROM inventory_table 
JOIN product_table ON product_table.barcode = inventory_table.barcode 
JOIN productcontains_table ON productcontains_table.barcode = product_table.barcode 
JOIN 
(SELECT barcode, 
     count(productcontains_table.name) AS cnt 
    FROM productcontains_table)b ON b.barcode=product_table.barcode 
GROUP BY inventory_table.barcode, 
    product_table.price, 
    inventory_table.barcode 

http://sqlfiddle.com/#!9/2f372/37

+0

還有一個問題,你可以看到group_concat它有兩個名字,這意味着它也將總數增加兩倍,所以總數不會超過3300,而是6600,因爲group_concat有兩個名字也會影響總金額 – unknown

+0

我認爲一個由count(productcontains_table.name)'劃分的部門應該完成這項工作。我無法讓它在小提琴中工作 – Lightningbear

+0

對不起,我不想粗魯,但要計算在字符串中的串聯?這有什麼意義? – unknown