2013-10-17 79 views
0

計算不同的列我有一個SQL表所示:SQL表的解決方案通過在同一個表

id buy_product  buy_product_total  sell_product  sell_product_total 
1  apple     5     
2  banana     8 
3  cake     20 
4            apple    1 
5            cake    2 
6  apple     2 

我的問題是,我要顯示產品名稱和多少產品左側。喜歡:

product_name   left 
    apple   6 
    cake   18 

如何顯示像SQL查詢解決方案?

創建表作爲應答者爲:

購買表

id  product_name  total 
    1  apple   5 
    2  banana   8 
    3  cake   20 
    4  apple   2 

賣表

id  product_name  total 
    1  apple   1 
    2  cake    2 

我想表這樣

product_name   left 
    apple     6 
    banana     8 
    cake     18 
+0

你或許應該把在兩個不同的表,一個購買,一個用於銷售數據。然後你可以通過連接兩個表來實現這一點。 –

+0

你使用了哪個數據庫?您使用MySQL和SQL Server標記了這一點,根據您的產品,可能會有數據庫特定的解決方案可供您使用。 – Taryn

+0

我正在使用mysql。但問題是,我上傳了一個excel文件,如果有相同的產品,我會做GROUP BY和SUM(buy_product_total)。 – Emin

回答

0

正如其他人所指出的那樣,你的表結構不理想。

但是,考慮到你有什麼,這會給你你後面的結果。

select product, sum(total) from 
(
    select buy_product as product, buy_product_total as total 
    from yourtable 
    where buy_product is not null 
    union 
    select sell_product, -sell_product_total 
    from yourtable 
    where sell_product is not null 
) v 
group by product 

,或者用兩個表

select product_name, sum(total) from 
(
    select product_name, total 
    from buy_table 
    union 
    select product_name, -total 
    from sell_table 
) v 
group by product_name 
+0

我固定表表,但仍然有問題。如果你檢查你可以看到,我變得有點瘋狂 – Emin

+0

第二個工作正常:) – Emin

0

你應該考慮各色NT數據庫的設計,是比較合適的(你可能想在規範化讀了),但查詢如下:

SELECT t1.buy_product_total - t2.sell_product_total 
FROM ProductTable t1, ProductTable t2 
WHERE t1.buy_product = t2.sell_product 

即您使用的是「自我加入」加入表本身......

+0

所以你也認爲我必須有兩個表 – Emin

+0

這是不行的 – Emin

+0

你改變了原來問題的結構。 –

1

是不是一個好的表,可以更好地購買和出售是正面的價值和消極的銷售。

但回答你的問題,假設你的表名是mytable的, OBS:您可以執行每一個選擇separeted更好地瞭解

select buy_product as product_name, (buy_total - sell_total) as left 
from (
    (select buy_product, sum(buy_product_total) as buy_total 
    from myTable where buy_product_total is not null group by buy_product) as buy_list 
    inner join 
    (select sell_product, sum(sell_product_total) as sell_total 
    from myTable where sell_product_total is not null group by sell_product) as sell_list 
    on buy_list.buy_product = sell_list.sell_product 
) 
+0

謝謝,這似乎是我必須做2表 – Emin

相關問題