2017-06-19 58 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;