Sql server 基于部门和状态列透视数据而不显示空值
基于父子关系的数据透视存在问题, 对于每个父id,我们可以在不同的部门下使用多个具有不同状态的子id。 因此,我们尝试使用循环根据每个部门下的parentid和child status透视子数据。 我试图向您展示我们在sp中进行了所有操作和旋转后获得的示例数据。但我们遇到了一些问题 其中在子ID之间显示空值 提前感谢,任何帮助都将不胜感激 下面是显示实际父、子关系数据的查询Sql server 基于部门和状态列透视数据而不显示空值,sql-server,sql-server-2008,pivot-table,Sql Server,Sql Server 2008,Pivot Table,基于父子关系的数据透视存在问题, 对于每个父id,我们可以在不同的部门下使用多个具有不同状态的子id。 因此,我们尝试使用循环根据每个部门下的parentid和child status透视子数据。 我试图向您展示我们在sp中进行了所有操作和旋转后获得的示例数据。但我们遇到了一些问题 其中在子ID之间显示空值 提前感谢,任何帮助都将不胜感激 下面是显示实际父、子关系数据的查询 Select * into #Actual_data from ( select 1 AS PARENTID,260 AS
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
命令,您可以做到这一点。
当项目被复制时,您需要一个单独的行,因此当同一部门出现多个实例时,您需要创建一个行编号
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
因此,使用内置的
pivot
命令,您可以做到这一点。
当项目被复制时,您需要一个单独的行,因此当同一部门出现多个实例时,您需要创建一个行编号
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