sql - 默认缺失数据
问题描述
我有一组复杂的架构,我试图从中提取数据以生成报告。它的查询将一堆表连接在一起,我特别希望提取一个数据子集,其中它的所有内容都可能为空。表的原始关系看起来是这样的。
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,他们不会将记录放在数据库中,因此位置/提交之间的关系不存在。
我通过 select count distinct 几乎有一个解决方法,但是,第二部分是一个查询,用于查找每个位置回答的内容,而不是总和,这会使问题重新出现。它还必须是动态的,因为部门的输入参数不会每次都带回静态数量的位置。
我仍在学习我的 SQL,因此对于构建此查询的任何其他材料也将不胜感激。所以我想这里的一个大问题是,我将如何在此查询中创建默认数据,以便在 Location/Submission 关系具有空值的任何时候?
编辑:虚拟数据
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 报告。这个特定部分有几个解决方法,通过一个表达式来获取总位置并减去 AnsYes 和 AnsNo 以获得真正的 NA 值,但如上所述对我的下一个查询没有帮助。
编辑:SQL Server 2012 适合那些询问的人
编辑:我对缺失数据的 isnull() 尝试没有返回任何我怀疑的结果,因为查询已经消除了“空/缺失”数据。这样做时离开加入也失败了。失败点在于提交。如果我们将其绑定到 Locations,则会丢失位置,但如果我们不绑定它,则会出现重复的重复项,因为 Department 与 Location 具有一对多,反之亦然。我无法进行任何架构更改来改进此过程。
我正在尝试模拟/更新以前的报告。它使用 C# 逻辑来处理数据并运行多个查询以获取相同的数据。我没有这种奢侈。(以前的报告直接导出到 excel 而不是 SSRS)。这是之前使用的逻辑。
select PK from Department where Name = 'InsertParameter';
select PK from Submission where LocationFK = 'Location.PK_var' and MonthTested = '1/1/2017'
然后它将它们运行到一个循环中,在该循环中使用 C# 逻辑将空值处理为 NA
编辑(平庸的解决方案):我最终解决了制作一个计算字段的方法,该字段从具有该部门的位置总数中减去是和否。这是一个平庸的解决方案,因为我没有解决我原来的问题并做了 3应显示为单个数据集的数据集。一个用于问题信息,一个用于每个位置的答案,一个用于未参与的位置。如果出现真正的答案,我会检查它的有效性,但现在,问题 psuedo 解决了。
解决方案
推荐阅读
- powershell - 在不同的域中创建 AD 用户
- mysql - ARel 中的案例陈述
- windows - 如何在 Windows 10 中模拟驱动程序级别的键盘输入?
- excel - Excel,如何计算单词的多条记录
- java - 通过 Spring Boot 连接 mysql 时出现时区问题,相当于 Mitteleuropäische Zeit
- c# - WPF:如何关闭
当在滚动查看器鼠标滚轮动作之外时 - neo4j - 如何使用变量动态创建 Neo4j/Cypher 标签?
- asp.net - ASP.Net Core 中的授权
- sql-server - TFS 2010 升级到 TFS 2013 - SQL Server 2008 R2 备份和还原到 SQL Server 2012/14
- go - 将“func 返回指向结构的指针”分配给“func 返回指向接口的指针”类型的 var