2016-03-22 20 views
1

Bana veri seti veren bir SQL yazdım.Kayıtları birleştirin ve farklı sütunlarda gösterin

SELECT [Id] 
     --,s1.[CustomerId] 
     ,[Date] 
     ,dc.ColumnName 
     ,dc.ColumnId 
     ,[RuleId] 
    -- ,[RuleExceptionCount] 
     --,[TotalRowCount] 
     ,CAST((TotalRowCount - RuleExceptionCount)/CAST(TotalRowCount AS FLOAT) * 100 AS DECIMAL(6,2)) AS [FailurePercentage] 
    FROM [ASMPredictiveAnalytics].[dbo].[DQHistory] AS s1 
    JOIN dbo.DQColumns dc ON dc.ColumnId = s1.ColumnId 
    WHERE Date = (SELECT MAX(date) FROM 
    dbo.DQHistory) AND [email protected] 

sonuç ben Temelde "Özet" ve "Çözüm için kayıtları devrik bu

[Want to make it this way[2]

gibi görünmek sonuçlanması istediğini bu

Looks right now

benziyor "Kalite" olarak adlandırılan başka bir sütun ekleyerek ve diğerlerinin geri kalanıyla "tek bir kayda" notu verir adları "," Kalite "" N/A "olarak göstermeniz gerekir.

+0

biz sadece her şeyi gruplandırılmış ve MIN (burada herhangi toplama işlevini kullanabilirsiniz) hesaplamak null olmayan değer ve hala olduğu durumda 'N/A' o değerin yerine ettik dış sorguda

sonuçları yapıştırabilirsiniz görüntülerin aksine biçimlendirilmiş metin olarak. Bu, insanların verilerinizi kopyalamasını ve sorunu yeniden oluşturmasını ve yanıtlar önermesini kolaylaştırır. Hala verileri içeren bir temp tablosu ve ona karşı bir sorgu ile çalıştırılabilir bir betik oluşturun. – Tanner

+0

"FailurePercentage" öğesinde bulunan değerleri "RuleId = 2" olan "Quantity" sütununa koymanız gerekiyor mu? –

cevap

1

aşağıdaki gibi sorgunuzu değiştirmek gerekir:

SELECT 
    MIN([Id]) as [Id], 
    [Date], 
    [ColumnName], 
    [ColumnId], 
    COALESCE(CAST(MIN(FailurePercentage) as varchar),'N/A') as FailurePercentage, 
    COALESCE(cast(MIN(Quality) as varchar),'N/A') as Quality 
FROM 
    (SELECT 
       [Id] 
       --,s1.[CustomerId] 
       ,[Date] 
       ,ColumnName 
       ,ColumnId 
       -- ,[RuleExceptionCount] 
       --,[TotalRowCount] 
       ,CASE WHEN [RuleId]=1 THEN CAST((TotalRowCount - RuleExceptionCount)/CAST(TotalRowCount AS FLOAT) * 100 AS DECIMAL(6,2)) ELSE NULL END as [FailurePercentage] 
       ,CASE WHEN [RuleId]=2 THEN CAST((TotalRowCount - RuleExceptionCount)/CAST(TotalRowCount AS FLOAT) * 100 AS DECIMAL(6,2)) ELSE NULL END as [Quality] 
     FROM [ASMPredictiveAnalytics].[dbo].[DQHistory] AS s1 
     JOIN dbo.DQColumns dc ON dc.ColumnId = s1.ColumnId 
     WHERE Date = (SELECT MAX(date) FROM 
     dbo.DQHistory) AND [email protected] 
    ) T 
    GROUP BY [Date],[ColumnName],[ColumnId] 

Açıklama:

Eğer başarısızlık yüzdesi ve Kalite için aynı hesaplamalar yaptıklarını beri, iç sorgusu içinde aynı şekilde onları koyduk ancak bunlardan biri RuleId sütununun değerine bağlı olarak NULL. NULL

İlgili konular