2013-08-06 51 views
0
只顯示一次列值

我有兩張表按名稱發票和invoice_product。要visiualize:MYSQL從表

發票表

Invoice_Number Invoice_Date Customer_Name Total_Amount 

    1   2013-08-01  XYZ  10000 
    2   2013-08-02  ABC   7000 
    3   2013-08-03  DEF   4000 

invoice_product表

Invoice_Number Product_names  Price 

     1    prd1   5000 
     1    prd2   3000 
     1    prd3   2000 
     2    prd22   3000 
     2    prd25   4000 
     3    prd13   2500 
     3    prd16   1500 

我想通過組合兩個表來得到下面的輸出。

Invoice_Number Invoice_Date Product_names Customer_Name Total_Amount 

    1   2013-08-01  prd1   XYZ   10000 
            prd2 
            prd3 

    2   2013-08-02  prd22   ABC   7000 
            prd25 

    3   2013-08-03  prd13   DEF   4000 
            prd16 

我試過以下查詢。

select Invoice_Number,Invoice_Date,Product,Customer_Name,Total_Amount from invoice,invoice_product where invoice.Invoice_Number=invoice_product.invoice_Number; 

我收到以下輸出。

Invoice_Number Invoice_Date Product_names Customer_Name Total_Amount 

    1   2013-08-01  prd1   XYZ   10000 
    1   2013-08-01  prd2   XYZ   10000 
    1   2013-08-01  prd3   XYZ   10000 

    2   2013-08-02  prd22   ABC   7000 
    2   2013-08-02  prd25   ABC   7000 

    3   2013-08-03  prd13   DEF   4000 
    3   2013-08-03  prd16   DEF   4000 

我需要在查詢中使用像Having,Distinct,Group By這樣的東西來獲得所需的輸出嗎?我是mysql的新手。任何幫助表示讚賞。

+1

你可以在'php'中做到這一點。只需在迭代過程中進行操作即可。 –

回答

1

如果你真的想每張發票只有一排,但希望每一個產品上市,我會建議使用GROUP_CONCAT()功能是這樣的:

SELECT 
    i.Invoice_Number AS Invoice_Number, 
    i.Invoice_Date AS Invoice_Date, 
    GROUP_CONCAT(ip.Product) AS products, 
    i.Customer_Name AS Customer_Name, 
    i.Total_Amount AS Total_Amount 
FROM invoice AS i 
INNER JOIN invoice_product AS ip 
    ON i.Invoice_Number=ip.invoice_Number 
GROUP BY i.Invoice_Number 

默認情況下GROUP_CONCAT()使用逗號作爲分隔符值之間,爲products列你會得到像prd1,prd2,prd3這樣的值。您可以根據需要指定不同的分隔符。