2015-04-17 2 views
-3

Ниже мой запрос:SQL запросов дает другой результат для PercentAnalysed

SELECT Runs.runId 
    ,Runs.prodId 
    ,passCount 
    ,failCount 
    ,CASE 
     WHEN failcount <> 0 
      THEN cast((round(((counts.Count 100.0)/failcount), 0)) AS NUMERIC) 
     WHEN failcount = 0 
      OR ***counts.Count IS NULL 
      THEN 100*** 
     ELSE 0 
     END **PercentAnalysed** 
FROM Runs AS Runs 
INNER JOIN Product AS Product 
    ON Runs.prodId = Product.prodId 
LEFT JOIN (
    SELECT COUNT(*) AS 'Count' 
     ,Results.runId 
    FROM Results 
    INNER JOIN Runs 
     ON Results.runId = Runs.runId 
    WHERE Analysed = 'True' 
    GROUP BY Results.runId 
    ) counts 
    ON counts.runId = Runs.runId 

Моя проблема заключается в том, что когда counts.Count является NULL, то процент Анализируются не показан 100.It пустым. (EDIT: согласно запросу, как вы можете видеть, когда counts.Count равен NULL, значение для столбца PercentAnalysed должно быть 100, но оно отображается как NULL)

Может ли кто-нибудь сказать мне, даже почему условие в инструкции CASE WHEN failcount = 0 ИЛИ counts.Count IS NULL THEN 100 не работает?

+0

Это дает несколько иной результат, чем что? Дайте мне секунду, я должен увидеть в своем кристаллическом шаре. – krzysiej

+0

: P Извините, я попытался объяснить в вопросе, хотя. Я дам ему еще одну попытку :) – bishnu

+0

Могут ли все, пожалуйста, остановить downvoting: P Я пытаюсь объяснить .. дай мне минуту, пожалуйста :) – bishnu

ответ

0

Это должно дать вам ожидаемый результат:

Изменение failcount к NULL, если это ноль и изменить NULL как результат расчета обратно 100:

CAST(COALESCE(ROUND(((counts.COUNT * 100.0)/NULLIF(failcount, 0)), 0), 100) AS NUMERIC) 
+0

Большое спасибо за ответы dnoeth :) Так что, я заменил мой случай заявление с тем, что вы написали above.The запрос теперь выглядит следующим образом: – bishnu

+0

ВЫБРАТЬ Runs.runId , Runs.prodId , passCount , failCount , CAST (COALESCE (ROUND (((counts.COUNT * 100.0)/NULLIF (failcount, 0)), 0), 100) AS NUMERIC) PercentAnalysed FROM Runs AS Runs INNER JOIN Продукт AS Продукт ON Runs.prodId = Product.prodId LEFT JOIN ( SELECT COUNT(), как 'Count' , Results.runId из результатов INNER JOIN прогонов ПО Results.runId = Runs.runId WHERE Анализируются = «True» GROUP BY Results.runId ) считает ON counts.runId = Runs.runId – bishnu

+0

Это дает ошибку выполнения SQL: Неправильный синтаксис около «Count» и неправильный синтаксис около ключевого слова AS – bishnu

Смежные вопросы