Graf muss nur für Einzelteil in SQL server erhalten

Ich habe einen Tisch wie folgt:

Bildbeschreibung hier eingeben

Ich habe eine Frage wie folgt:

SELECT T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName as Description, T_Master_Item.categoryCode as Category, sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) As Qty, SUM(CASE WHEN DOCTYPE = 'GOOD' THEN 1 ELSE 0 END ) Good, SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN 1 ELSE 0 END) Defective FROM T_BOE_Stock_Detail LEFT OUTER JOIN T_Master_Item ON T_BOE_Stock_Detail.itemCode = T_Master_Item.itemCode group by T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName,T_Master_Item.categoryCode having sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) > 0 order by T_Master_Item.categoryCode, T_BOE_Stock_Detail.itemCode 

Ich bekomme wie folgt:

  itemcode description category qty good defective 076-00002 bottom 2 6 1 

Ich möchte die Zählung von gut und defekt nur für bestimmte Artikel zu berechnen (ich meine, dass alle Artikel Code Menge> 0, Menge Berechnung wie folgt: ((T_BOE_Stock_Detail.qty – T_BOE_Stock_Detail.ReservedQty)> 0)

Meine erwartete Ausgabe wie folgt:

  itemcode description category qty good defective 076-00002 bottom 2 1 1 

Solutions Collecting From Web of "Graf muss nur für Einzelteil in SQL server erhalten"

Sie SUM macht die Zählung auf alle Zeilen, nicht nur die mit Menge> 0

Versuchen Sie diese Bearbeiten:

 SELECT T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName as Description, T_Master_Item.categoryCode as Category, sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) As Qty, SUM(CASE WHEN DOCTYPE = 'GOOD' THEN 1 ELSE 0 END ) Good, SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN 1 ELSE 0 END) Defective FROM T_BOE_Stock_Detail LEFT OUTER JOIN T_Master_Item ON T_BOE_Stock_Detail.itemCode = T_Master_Item.itemCode WHERE T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty > 0 group by T_BOE_Stock_Detail.itemCode, T_Master_Item.itemName,T_Master_Item.categoryCode having sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) > 0 order by T_Master_Item.categoryCode, T_BOE_Stock_Detail.itemCode 

Auf diese Weise bekommst du nur die Zeilen mit Menge, und die SUM ware nicht den Rest zählen.

Wenn du die Menge für gute und reservierte Felder zählen möchtest, ändere die CASE statementen wie folgt:

 SELECT ... sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) As Qty, SUM(CASE WHEN DOCTYPE = 'GOOD' THEN qty ELSE 0 END ) Good, SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' THEN qty ELSE 0 END) Defective FROM T_BOE_Stock_Detail .. 

Wenn du die Anzahl der Zeilen zählen willst, ist es:

 SELECT ... sum(T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty) As Qty, SUM(CASE WHEN DOCTYPE = 'GOOD' AND T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty > 0 THEN 1 ELSE 0 END) Good, SUM(CASE WHEN DOCTYPE = 'DEFECTIVE' AND T_BOE_Stock_Detail.qty - T_BOE_Stock_Detail.ReservedQty > 0 THEN 1 ELSE 0 END) Defective FROM T_BOE_Stock_Detail ..