2016-03-24 32 views
-4
için Ortalama Hesaplama

Değer sütunu için tüm doldurma oranını ortalama olarak hesaplamaya çalışıyorum, ancak yalnızca açıklaması null değilse, açıklama ve değer boşsa, ortalama hesaplama dışında bırakılmalıdır.SQL Server 2008

DECLARE @MASTER TABLE 
(
    PRODUCT VARCHAR (50), 
    Desc1  VARCHAR (50), 
    Desc1Value VARCHAR (50),  
    Desc2  VARCHAR (50), 
    Desc2Value VARCHAR (50), 
    Desc3  VARCHAR (50), 
    Desc3Value VARCHAR (50), 
    Desc4  VARCHAR (50), 
    Desc4Value VARCHAR (50), 
    Desc5  VARCHAR (50), 
    Desc5Value VARCHAR (50), 
    Desc6  VARCHAR (50), 
    Desc6Value VARCHAR (50) 
) 

INSERT @MASTER 
    SELECT 
     'AMPLIFIER', 'Color', 'Black', 'Material', 
     'Blended TPO', 'Edge Type', 'Raised', 
     'Surface Type', 'Non-Skid', 'Coverage', NULL, 
     NULL, NULL 

    UNION ALL 

    SELECT 
     'AMPLIFIER', 'Color', 'Black', 'Material', 'Blended TPO', 
     'Edge Type', 'Raised', 'Surface Type', 'Non-Skid', 
     'Coverage', NULL, NULL, NULL 

    UNION ALL 

    SELECT 
     'RECTIFIER', 'Style', 'Film Kit', 'Color', 'Clear', 
     'Material', 'Urethane', 'Quantity', NULL, NULL, NULL, 
     NULL, NULL 

    UNION ALL 

    SELECT 
     'RECTIFIER', 'Style', 'Film Kit', 'Color', 'Clear', 
     'Material', 'Urethane', 'Quantity', NULL, NULL, NULL, 
     NULL, NULL 

    UNION ALL 

    SELECT 
     'Diode', 'Rating', '6 Ampere', 'Quantity', 'Pack Of 12',  
     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL 

Beklenen çıkışı:

Overall_fillrate:- 68.33% 

kimse bana yardım miyim, ben birden yol çalıştı ama bunu başaramadı.

sayesinde böyle

+4

Ve bu verilerden% 68.33 'ü nasıl elde edersiniz? (Ayrıca, veritabanı yapınız da korkunç! Neden? Sadece "siyah renkli olan tüm ürünleri bul" gibi basit bir şey "yazmak zor") – Jamiec

+0

Bu yazı bana bir anlam ifade etmiyor. –

+0

Örnek basitleştirin, daha az sütun var. – jarlh

cevap

1

?

select (COUNT(CASE WHEN Desc1 is not null then Desc1Value end) 
    + COUNT(CASE WHEN Desc2 is not null then Desc2Value end) 
    + COUNT(CASE WHEN Desc3 is not null then Desc3Value end) 
    + COUNT(CASE WHEN Desc4 is not null then Desc4Value end) 
    + COUNT(CASE WHEN Desc5 is not null then Desc5Value end) 
    + COUNT(CASE WHEN Desc6 is not null then Desc6Value end)) 
    * 100.0 
    /(6 * COUNT(*)) 
from @MASTER