sql - 包括空值在内的多个字段的 SQL Pivot 语法
问题描述
我有(对我来说)需要使用枢轴的复杂情况。设置是这样的:
Parent
Id
Filter1
Filter2
TypeId
FirstChild
Id
ParentId
Value
Count
ValidFrom
ValidTo
SecondChild
Id
FirstChildId
Value
TypeTable
Id
Type
在数据中,来自 Parent 的 Filter1、Filter2 和 Type 创建唯一集(我们在 DB 上有索引以确保它保持这种状态)。在 FirstChild 上,我们进行了代码验证,因此 ValidFrom - ValidTo 范围没有重叠 - 如果您对日期执行查询,则每个父级都会得到一行为方便起见,Parent 中的 Type 字段可以包含 Type1、Type2、Type3(有总共 75 种类型,但查询的那部分将动态生成)此外,某些类型的值可以为空,或者该行可能根本不存在,在这种情况下需要返回为空。SecondChild 应作为属于 FirstChild 的第一行返回
因此,返回非旋转数据集的查询如下所示
Select p.Id As ParentId, t.Type, c1.Value As Value, c1.Count, c2.Value As AdditionalValue
From TypeTable as t
Left Join Parent as p On t.Id = p.TypeId And Filter1 In @listFilter1 And Filter2 In @listFilter2
Left Join FirstChild As c1 On (c1.ValidFrom <= @ValidOn And c1.ValidTo >= @ValidOn) And c1.ParentId = p.Id
Left Join (Select * From SecondChild Where Id In (Select Min(Id) From SecondChild Group By FirstChildId)) As c2 On c2.FirstChildId = c1.Id
Where t.Id In(List of Id)
给定搜索过滤器,所有 3 个字段(值、计数和附加值)都可以为空。但是,每个类型只能有一行。
我需要的是将结果转换为:
ParentId | Type1Value | Type1Count | Type1AdditionalValue | Type2Value | Type2Count | Type2AdditionalValue | and so on for 75 types
目前,我可以获得每个类型的值,但只能使用聚合 Sum(Value),其中我松散 null(我需要它)对于 3 个字段的 Pivot 尝试,我使用了 3 个单独的 Pivot 语句并将它们中的每一个加入最佳。但这非常复杂(最后我需要旋转 7 个字段)。所以,把我推向正确的方向,以简化我的查询。
解决方案
推荐阅读
- r - 运行 MethylMix R 包时出错
- python - 未检测到 DynamicRelationField
- cucumber - 我的第一个基本 Cucumber 程序(场景)失败 - Java
- javascript - 引导网格:减小窗口大小时,最后一个 div 不会出现在下一行
- python - pip install requests[security] 本身会引发 InsecurePlatform 警告/错误
- angularjs - 带有 html 不安全的 Uib 工具提示
- corda - 是否应该使用 Corda Workflow 来管理一般业务工作流
- c# - ASP.NET Core 2.1 - IdentityUser 问题 - 无法为“IdentityUser”创建 DbSet,此类型未包含在上下文模型中
- swift - 如何使用包含友好日期和月份的 DateFormatter 格式化日期
- java - 在窗口机器上找出远程用户登录时间的方法