我们在基于父子关系透视数据时遇到问题, 对于每个家长 ID,我们可能会在不同部门下使用多个具有不同状态的孩子 ID。 因此,我们尝试使用循环根据每个部门的父 ID 和子状态来透视子数据。 我试图向您展示我们在sp中进行所有操作和枢轴后获得的示例数据。但是我们遇到了一些问题 在子 ID 之间显示空值的位置。
提前感谢,任何帮助将不胜感激。
下面是显示我们实际的父子关系数据的查询
Select * into #Actual_data from (
select 1 AS PARENTID,260 AS CHILDID,'C' AS STATUS,'DENTAL' AS DEPARTMENT
UNION ALL
SELECT 1,230,'C','VISION'
UNION ALL
SELECT 1,200,'N','VISION'
UNION ALL
SELECT 1,530,'N','DENTAL'
UNION ALL
SELECT 1,450,'T','VISION'
UNION ALL
SELECT 1,300,'T','DENTAL'
UNION ALL
SELECT 1,330,'T','DENTAL'
) as a
Select * from #Actual_data
在我们的 sp 执行之后,我们获得了以下数据
Select * into #Sp_data from (
select 'C' AS STATUS, 1 AS PARENTID ,NULL AS VISION_CHILDS,260 AS DENTAL_CHILDS
UNION ALL
select 'C', 1 ,230 ,NULL
UNION ALL
SELECT 'N',1 ,200,NULL
UNION ALL
SELECT 'N',1 ,NULL,530
UNION ALL
SELECT 'T', 1 ,450,NULL
UNION ALL
SELECT 'T', 1 ,NULL,300
UNION ALL
SELECT 'T', 1,NULL, 330
)as a
select * from #Sp_data
预期输出:
STATUS PARENTID VISION_CHILDS DENTAL_CHILDS
C 1 230 260
N 1 200 530
T 1 450 300
T 1 NULL 330
因此,使用内置的pivot
命令,您可以执行此操作。 由于在重复项目时需要单独的行,因此需要在同一部门的多个实例发生时创建row_number
。
select Status, ParentId, Vision as VisionChilds, Dental as DentalChilds
from (
select *,
row_number() over (partition by ParentId, Status, department order by ChildId) rn
from #actual_data) s
pivot (max(childId) for department in (vision, dental)) p