2013-08-08 7 views
0

Ниже приведены вид моего стола ...счетных Четкие значения из таблицы Sql

enter image description here

Я получаю трудное время в получении желаемого результата из запроса.

Мое требование выглядит, как показано ниже изображения

enter image description here

Это должно быть обусловлено следующим - 1) В дату начала и дату окончания.

2) Нет, как ожидается.

3) Да, как завершено.

4) Нет + Да как Всего.

5) Основано только на одном опросе Тип.

Это то, что я пробовал и получил результат для вышеупомянутых условий от 1 до 4, но как ввести в действие условие 5?

SELECT DISTINCT Userid 
    ,CASE 
    WHEN [YES] IS NULL 
     THEN 0 
    ELSE [YES] 
    END AS Completed 
    ,CASE 
    WHEN [NO] IS NULL 
     THEN 0 
    ELSE [NO] 
    END AS Pending 
    ,(
    CASE 
     WHEN [YES] IS NULL 
     THEN 0 
     ELSE [YES] 
     END + CASE 
     WHEN [NO] IS NULL 
     THEN 0 
     ELSE [NO] 
     END 
    ) AS Total 
FROM (SELECT DISTINCT Userid 
    ,SurveyStatus 
    ,COUNT(ParcelId) AS cnt 
    FROM ParcelAllocationsurvivor 
    WHERE DateAllocated >= '2013-08-01' 
    AND DateAllocated <= '2013-08-07' 
    GROUP BY Userid 
    ,SurveyStatus 
) AS p 
PIVOT(max(cnt) FOR surveystatus IN ([YES],[NO])) AS pvt 
ORDER BY Userid 

Может ли кто-нибудь помочь мне в этом.

заранее спасибо ////

+0

Можете ли вы привести пример ожидаемого результата? Вы хотите, чтобы результаты включали только тип опроса или группировались по типу опроса? – Jim

+0

вывод такой же, что вы видите в моем изображении требований, мне нужно ввести предложение where, например «Surveytype» = 1 – NewBee

ответ

0

Вы бы добавить пункт where в подзапрос:

SELECT Userid, (case when [YES] is null then 0 else [YES] end) as Completed, 
     (case when [NO] is null then 0 else [NO] end) as Pending, 
     (case when [YES] is null then 0 else [YES] end + 
     case when [NO] is null then 0 else [NO] end 
     ) as Total 
FROM (SELECT Userid, SurveyStatus, COUNT(ParcelId) as cnt 
     FROM ParcelAllocationsurvivor 
     WHERE DateAllocated >= '2013-08-01' and DateAllocated <='2013-08-07' and 
      SurveyType = 'Survey1' 
     group by Userid, SurveyStatus 
    ) AS p 
PIVOT(max(cnt) FOR surveystatus IN([YES],[NO])) AS pvt order by Userid; 

К слову, select distinct являются избыточными. Они вам не нужны для этого запроса.

+0

Нет, не работает правильно, говорит total = 1, pending = 1, но данные намного больше, всего 40 – NewBee

+0

@NewBee. , , Вы уверены, что внутренний подзапрос возвращает то, что вы хотите? Возможно, арифметика даты не делает то, что вы ожидаете. –

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