По умолчанию недостающие данные - PullRequest
0 голосов
/ 05 июля 2018

У меня сложный набор схем, из которых я пытаюсь извлечь данные для отчета. Запрос для него объединяет несколько таблиц, и я специально пытаюсь получить подмножество данных, где все для него может быть нулевым. Исходные отношения для таблиц выглядят так.

Location.DeptFK
Dept.PK
Section.DeptFK
Subsection.SectionFK
Question.SubsectionFK
Answer.QuestionFK, SubmissionFK
Submission.PK, LocationFK

Отсюда мои проблемы начинают немного усугубляться.

SELECT        Section.StepNumber + '-' + Question.QuestionNumber AS QuestionNumberVar, 
                Question.Question, 
                Subsection.Name AS Subsection, 
                Section.Name AS Section, 
                         SUM(CASE WHEN (Answer.Answer = 0) THEN 1 ELSE 0 END) AS NA, 
                         SUM(CASE WHEN (Answer.Answer = 1) THEN 1 ELSE 0 END) AS AnsNo, 
                         SUM(CASE WHEN (Answer.Answer = 2) THEN 1 ELSE 0 END) AS AnsYes,
                         (select count(distinct Location.Abbreviation) from Department inner join Plant on location.DepartmentFK = Department.PK WHERE(Department.Name = 'insertParameter')) 
                        as total
FROM            Department inner join
section on Department.PK = section.DepartmentFK inner JOIN
subsection on Subsection.SectionFK = Section.PK INNER JOIN
question on Question.SubsectionFK = Subsection.PK INNER JOIN
Answer on Answer.QuestionFK = question.PK inner JOIN
Submission on Submission.PK = Answer.SubmissionFK inner join
 Location on Location.DepartmentFK = Department.PK AND Location.pk = Submission.PlantFK

WHERE        (Department.Name = 'InsertParameter') AND (Submission.MonthTested = '1/1/2017') 
GROUP BY Question.Question, QuestionNumberVar, Subsection.Name, Section.Name, Section.StepNumber
ORDER BY QuestionNumberVar;

Всего 15 местоположений, по этому запросу я получаю 12. Если я удаляю отношение в объединении для местоположения, я получаю 15 общих местоположений, но мои данные ответов умножаются на 15. Моя проблема заключается в том, что не все местоположения требуются для тестируйте в то же время, чтобы их ответы по умолчанию имели значение NA. Они не получают записи, размещенные в БД, поэтому связь между местоположением и отправкой отсутствует.

У меня есть обходной путь почти на месте с помощью отдельного счетчика выбора, но, Вторая часть - это запрос для определения того, что ответило каждое местоположение, а не сумма, которая возвращает проблему обратно. Это также должно быть динамическим, потому что входные параметры для отдела не будут возвращать статическое число местоположений каждый раз.

Я все еще изучаю свой SQL, поэтому любые дополнительные материалы для поиска этого запроса также будут оценены. Поэтому я думаю, что главный вопрос здесь заключается в следующем: как мне создать данные по умолчанию в этом запросе в любое время, когда отношение расположение / отправка имеет нулевое значение?

Редактировать: фиктивные данные

QuestionNumberVar | Section | Subsection | Question                 | AnsYes | AnsNo | NA (expected)
1-1.1               Math      Algebra      Did you do your homework?   10      1        1(4) 
1-1.2               Math      Algebra      Did your dog eat it?        9      3        0(3)
2-1.1               English   Greek        Did you do your homework?   8      0        4(7) 

Я пытался делать левые соединения в различных частях кода, но безрезультатно. Все попытки левых объединений закончились без влияния на вывод информации. Этот запрос подается в набор данных для отчета SSRS. Для этого конкретного раздела есть несколько обходных путей с помощью выражения, позволяющего получить итоговые значения Locations и вычесть AnsYes и AnsNo, чтобы получить истинное значение NA, но, как объяснено выше, не поможет с моим следующим запросом.

Редактировать: SQL Server 2012 для тех, кто спросил

Редактировать: моя попытка isnull () для отсутствующих данных не возвращает ничего, что я подозреваю, потому что запрос уже удаляет "нулевые / отсутствующие" данные. Левое присоединение при этом тоже не получилось. Точка неудачи находится на подаче. если мы привязываем его к местоположениям, то пропадают местоположения, но если мы не связываем их, то там дублируются дубликаты, потому что у Департамента есть «один ко многим» с местоположением, а не наоборот. Я не могу внести какие-либо изменения в схему, чтобы улучшить этот процесс.

Существует предыдущий отчет, который я пытаюсь эмулировать / обновить. Он использовал логику C # для обработки данных и запуска нескольких запросов для получения одних и тех же данных. У меня нет этой роскоши. (предыдущий отчет экспортируется в Excel напрямую вместо SSRS). Вот предыдущая используемая логика.

select PK from Department where Name = 'InsertParameter';
select PK from Submission where LocationFK = 'Location.PK_var' and MonthTested = '1/1/2017'

Затем он запускает их в цикл, где обрабатывает нули в NA с использованием логики C #

РЕДАКТИРОВАТЬ (Посредственное решение): я закончил тем, что сделал обходной путь для создания вычисляемого поля, которое вычитает Да и Нет из общего числа Мест, имеющих этот Отдел. Это посредственное решение, потому что я не решил свою первоначальную проблему и сделал 3 набора данных, которые должны были отображаться как отдельный набор данных. Один для информации о вопросе, один для каждого местоположения ответа и один для местоположений, которые не участвовали. Если будет дан верный ответ, я проверю его правильность, но пока проблема psuedo решена.

...