2017-06-19 3 views
0

Ich möchte zählen und Summe der Artikel, die Wert größer als Null ist. Folgende Daten und Beispiel wird in unten gezeigt .... Ich kann Daten in diesem Format nicht erhalten. so helfen Sie mir ....Druck Spalte Name, Anzahl und Summe, wenn die Werte größer als Null ist

Originaldaten

--------------------------------------- 
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 
--------------------------------------- 

ich in diesem Format will

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

Ihre Daten sind nicht normalisiert. Sie sollten Ihr Tischdesign ändern –

+0

Wie juergen d sagte. Sonst brauchen Sie 4 Abfragen oder Sie kombinieren die Abfragen mit UNION –

+0

Sir, könnten wir Fall, wann und dann verwenden? –

Antwort

1

Sie können die folgende Abfrage mit diesem Motiv verwenden:

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 

Aber Tischdesign ist nicht richtig. Es sollte etwas wie unten sein:

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

Dann können Sie case-Anweisung verwenden, um item_name zu vergleichen.

+0

hinzufügen 'where Item_ #> 0' sonst zählen wird falscher Wert zurückgegeben –

+0

@manishyadav: Bitte akzeptieren Sie dies als richtige Antwort auf Ihre Frage. –

0

Zuerst bitte normalisieren Sie die db mindestens unter.

Artikel Tisch

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

items_values ​​Tabelle

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

Dann können Sie einfach Ihr Ergebnis wie unten bekommen.

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; 
Verwandte Themen