2017-06-19 24 views
0

我想對這些值進行計數和總和,那些值大於零。以下數據和示例顯示在下面....我無法獲取此格式的數據。所以請幫助我....如果值大於零,則打印列名稱,計數和總和

原始數據

--------------------------------------- 
Id  Item_1 Item_2 Item_3 Item_4 
--------------------------------------- 
1   0  500  0  0 
2   200  0  0  0 
3   350  0  0  0 
4   0  0  500  0 
5   0  300 0   0 
6   0  0  0  400 
7   0  0  200  0 
--------------------------------------- 

我想在這個格式

-------------------- 
Count ITEM SUM 
-------------------- 
2  Item_1 550 
2  Item_2 800 
2  Item_3 700 
1  Item_4 400 
+3

您的數據未規範化。你應該改變你的餐桌設計 –

+0

正如juergen d所說。否則,您需要4個查詢,或者將查詢與UNION –

+0

結合起來。先生,我們可以使用案例嗎? –

回答

1

您可以使用此設計以下查詢:

select count(Item_1) as Count, 'Item_1' as ITEM, sum(Item_1) as SUM from table_name 
UNION 
select count(Item_2) as Count, 'Item_2' as ITEM, sum(Item_2) as SUM from table_name 
UNION 
select count(Item_3) as Count, 'Item_3' as ITEM, sum(Item_3) as SUM from table_name 
UNION 
select count(Item_4) as Count, 'Item_4' as ITEM, sum(Item_4) as SUM from table_name 

但表格設計不合適。它應該像下面這樣:

create table my_table 
(id int, item_name varchar(50), item_sold int); 

然後,您可以使用case語句來比較item_name。

+0

add'where Item_#> 0'否則計數將返回錯誤的值 –

+0

@manishyadav:請接受這是您的問題的正確答案。 –

0

首先請正常化db至少在下面。

項目表

-------------- 
id  item 
-------------- 
1  Item 1 
2  Item 2 
3  Item 3 
-------------- 

items_values表

-------------------------- 
id item_id item_value 
-------------------------- 
1  1   0 
2  1   200 
3  3   350 
--------------------------  

然後,你可以簡單地得到你的結果如下圖所示。

SELECT COUNT(items_values.item_value) AS ValueCount, items.item, SUM(items_values.item_value) FROM items_values 
INNER JOIN items ON items_values.item_id = items.id 
GROUP BY items.id; 
相關問題