基于部门和状态列调整数据,不显示空值



我们在基于父子关系透视数据时遇到问题, 对于每个家长 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

最新更新