2016-04-10 5 views
0

Я мог бы воспользоваться некоторой помощью. У меня есть запрос, который подсчитывает количество кодов ошибок с помощью оператора Case и Like с предложением Where в дате. Затем я объединяю его со вторичным запросом. Только разница - это дата. Он работает, но возвращает значения вКоличество запросов SQL Union для разных столбцов

Fault Code  Count 
    20k   71 
    60k   167 
    20k   86 
    60k   178 

Он возвращает вторичный счет под колонкой «Граф». Однако я хочу добавить еще один столбец. Пример:

Fault Code CountA  CountB 
    20k   71   86 
    60k   167  178 

Любые предложения? Создать временную таблицу?

Вот мой код.

SELECT 
    CASE 
    WHEN FaultCode LIKE '60%' THEN '60k' 
    WHEN FaultCode LIKE '20%' THEN '20k' 
    END AS FaultCode 
    , COUNT(FaultCode) AS Day1 
    FROM RmaSummary 
    Where CreationTime > '2016-03-30' AND CreationTIme < '2016-03-31' AND 
    ClosedTime Is null AND (FaultCode LIKE '60%' OR FaultCode LIKE '20%') 
    AND FaultCode <> '20000' AND FaultCode <> '60052' AND FaultCode <> '0' 
    GROUP BY 
    CASE 
    WHEN FaultCode LIKE '60%' THEN '60k' 
    WHEN FaultCode LIKE '20%' THEN '20k' 
    END 
    Union All 
    SELECT 
    CASE 
    WHEN FaultCode LIKE '60%' THEN '60k' 
    WHEN FaultCode LIKE '20%' THEN '20k' 
    END AS FaultCode 
    , COUNT(FaultCode) AS Day2 
    FROM RmaSummary 
    Where CreationTime > '2016-03-31' AND CreationTIme < '2016-04-01' AND 
    ClosedTime Is null AND (FaultCode LIKE '60%' OR FaultCode LIKE '20%') 
    AND FaultCode <> '20000' AND FaultCode <> '60052' AND FaultCode <> '0' 
    GROUP BY 
    CASE 
    WHEN FaultCode LIKE '60%' THEN '60k' 
    WHEN FaultCode LIKE '20%' THEN '20k' 
    END 
+0

Используйте PIVOT, чтобы сделать это – Squirrel

ответ

1

Использование Conditional Aggregation вместо UNION, который поможет вам результат ожидаемого формата.

Это будет подсчитывать записи только тогда, когда faultcode падение с в заданном диапазоне дат

SELECT CASE 
     WHEN faultcode LIKE '60%' THEN '60k' 
     WHEN faultcode LIKE '20%' THEN '20k' 
     END  AS FaultCode, 
     Count(CASE 
       WHEN creationtime > '2016-03-30' 
        AND creationtime < '2016-03-31' THEN faultcode 
      END) AS Day1, 
     Count(CASE 
       WHEN creationtime > '2016-03-31' 
        AND creationtime < '2016-04-01' THEN faultcode 
      END) AS Day2 
FROM rmasummary 
WHERE closedtime IS NULL 
     AND (faultcode LIKE '60%' 
       OR faultcode LIKE '20%') 
     AND faultcode <> '20000' 
     AND faultcode <> '60052' 
     AND faultcode <> '0' 
GROUP BY CASE 
     WHEN faultcode LIKE '60%' THEN '60k' 
     WHEN faultcode LIKE '20%' THEN '20k' 
     END 
+0

Удивительный !!! Только то, что мне было нужно. Огромное спасибо. Очень ценится. – EMIE

+1

@EMIE - Рад, что ответ вам помог. Пожалуйста, примите ответ, нажав на значок галочки слева от ответа, чтобы он мог быть закрыт. Благодарю. – Utsav