我有几个表格,例如
dbo.ServiceEntry(ID,SystemID)
dbo.ServiceEntryPart(ID,PartID,ServiceEntryID,RevisionNumber)
dbo.Part(ID,Description,..,..,InstrumentTypeID,PlatformID,BaseLineNumber)
dbo.Sytem(ID,FullName,PlatformID)
dbo.SystemModule(ID,SystemID,InstrumentTypeID)
dbo.InstrumentType(ID,Name)
我编写了一个动态数据透视查询,它返回在服务条目中使用并具有修订号的部分。所以基本上是在系统上创建服务条目,并且在该服务条目中选择了部分,并且用户为所选部分添加了修订号
所以结果如下所示
PartID PartDescription System1 System2 System3
1020 xyz NULL 102 NULL
现在我需要在查询中添加条件,如果零件没有匹配的服务条目,那么我将使用零件表中的零件基线编号替换枢轴列 - 行值,而不是服务条目中的修订版号零件表
基本上如上所述,如果部件1020未在服务条目中使用,则结果将如下所示,其中系统列行值是部件表中的部件基线编号。系统3值不会填充基线修订号,因为该部分不属于该系统。
PartID PartDescription System1 System2 System3
1020 xyz 100 100 NULL
那么如何在现有的动态数据透视查询中添加上述条件呢?
DECLARE @PivotColumnHeaders NVARCHAR(MAX)
SELECT @PivotColumnHeaders =
COALESCE(
@PivotColumnHeaders + ',[' + cast(SystemFullName as Nvarchar) + ']',
'[' + cast(SystemFullName as varchar)+ ']'
)
FROM System
DECLARE @PivotTableSQL NVARCHAR(MAX)
SET @PivotTableSQL = N'
SELECT *
FROM (
select p.HighLevelPart as Subsystem,
p.ID as PartNumber,p.PartDescription as Description,
s.SystemFullName,
sep.PartRevisionNumber AS Revision from ServiceEntry se
inner join ServiceEntryPart sep
on sep.ServiceEntryID = se.ID
inner join Part p on
sep.PartID = p.ID
inner join System s on
se.SystemID = s.ID
and p.HighLevelPart is not null
and sep.PartRevisionNumber is not null
) AS PivotData
PIVOT (
MAX(Revision)
FOR SystemFullName IN (
' + @PivotColumnHeaders + '
)
) AS PivotTable
'
exec sp_executesql @PivotTableSQL