Подсчет строк с определенной записью для каждой отдельной записи другой строки - PullRequest
0 голосов
/ 21 ноября 2018

Итак, моя задача - рассчитать несколько простых KPI.

Я уже накопил представление со всеми необходимыми мне данными.

 Year_CW    Is Started      Needs Help
 -------------------------------------
 2018/45       0              1
 2018/43       1              1
 2018/45       0              1
 2018/42       1              0
 2018/45       0              1
 2018/45       1              1
 2018/41       0              1
 2018/43       0              0
 2018/45       1              1
 2018/45       0              0

Затем я написал следующий запрос:

SELECT DISTINCT YEAR_CW 
FROM TestView
ORDER BY YEAR_CW DESC

, который возвращает это

Year_CW
--------
2018/45
2018/44
2018/43
2018/42

Теперь я хотел бы посчитать для каждого Year_CW, как часто1 и как часто есть ноль для обеих других строк.Это может быть довольно простой вопрос, но я только начинаю с SQL, и я действительно не знаю, какое ключевое слово для запроса, основанного на внешнем запросе.

Другие запросы будут

Select Count(Is Started)
from Testview
Where Is Started = 1

И так далее для остальных.Но я действительно не знаю, как их собрать и основать на первом запросе.

Спасибо за вашу помощь.

Ответы [ 4 ]

0 голосов
/ 21 ноября 2018
select Year_CW
, sum(case when Is_Started = 1 then 1 end) as Is_Started_1
, sum(case when Is_Started = 0 then 1 end) as Is_Started_0
, sum(case when Needs_Help = 1 then 1 end) as Needs_Help_1
, sum(case when Needs_Help = 0 then 1 end) as Needs_Help_0
from Test_View 
group by Year_CW

Итак, как я это сделал, я создал для вас 4 новых поля.Сначала задается значение «1» для каждого поля, где «Is_Started = 1», а затем я суммирую экземпляры.Я сделал то же самое для 0 значений и еще два поля для значений 1 и 0 для столбца «Справка Needs_».Я верю, что это даст вам желаемый результат.

0 голосов
/ 21 ноября 2018

Вы, кажется, хотите условную агрегацию:

select Year_CW,
       sum(case when col = 1 then 1 else 0 end) as one_count,
       sum(case when col = 0 then 1 else 0 end) as zero_count
from (select Year_CW, IsStarted as col
      from TestView tv
      union all
      select Year_CW, NeedsHelp
      from TestView tv
     ) tv
group by Year_CW
order by Year_CW desc;
0 голосов
/ 21 ноября 2018

Если это только 0 или 1, то и 0 или 1 можно суммировать.

SELECT YEAR_CW, 
SUM("Is Started") AS TotalStarted,
SUM(1 - "Is Started") AS TotalNotStarted,
SUM("Needs Help") AS TotalNeedsHelp,
SUM(1 - "Needs Help") AS TotalNoHelpNeeded
FROM TestView
GROUP BY YEAR_CW
ORDER BY YEAR_CW DESC
0 голосов
/ 21 ноября 2018

Итак, если я правильно понимаю вопрос, вы просто ищете SUM из дополнительных двух столбцов GROUP BY поля Year_CW.Это было бы следующим.

SELECT Year_CW, SUM([Is Started]), SUM([Needs Help])
FROM TestView
GROUP BY Year_CW
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...