I work on SQL server 2014 I need to get data from compliance data table horizontally .
based on part id and compliance type Id
every part id will have one row per 3 compliance type
every row per part will have 3 compliance type id 1,2,11
if part not have 3 compliance then it will take Null on empty compliance Type
as part id 749120,4620
part id 749120 blank on reach and TSKA
part id 4620 blank on TSKA
if I have multi row per both ( compliance type and part id ) as part id 5090
then I will take first row based on max version order as 40 for part id 5090
version order 40 is bigger than 3 so I take first row version order 40 Per Compliance Type Id 1
every compliance Type not have data will be display as NULL on data related as
Part id 749120 will have NULL ON Rohs and TSKA
so How to do that please ?
sample data as below
create table #ComplianceData
(
PartId int,
ComplianceTypeID int,
CompStatus nvarchar(30),
VersionOrder int,
ComplianceType NVARCHAR(30)
)
insert into #ComplianceData(PartId,ComplianceTypeID,CompStatus,VersionOrder,ComplianceType)
values
(5090,1,'Compliant',3,'Rohs'),
(5090,1,'NotCompliant',40,'Rohs'),
(5090,2,'Compliant',25,'Reach'),
(5090,11,'NotCompliant',1,'TSKA'),
(2306,1,'Compliant',3,'Rohs'),
(2306,2,'NotCompliant',25,'Reach'),
(2306,11,'Compliant',1,'TSKA'),
(4620,1,'NotCompliant',3,'Rohs'),
(4620,2,'Compliant',25,'Reach'),
(749120,2,'Compliant',25,'Reach')
PartId | RohsComplianceTypeID | RohsCompStatus | RohsVersionOrder | RohsComplianceType | ReachComplianceTypeID | ReachCompStatus | ReachVersionOrder | ReachComplianceType | TSKAComplianceTypeID | TSKACompStatus | TSKAVersionOrder | TSKAComplianceType |
---|---|---|---|---|---|---|---|---|---|---|---|---|
5090 | 1 | NotCompliant | 40 | Rohs | 2 | Compliant | 25 | Reach | 11 | NotCompliant | 1 | TSKA |
2306 | 1 | Compliant | 3 | Rohs | 2 | NotCompliant | 25 | Reach | 11 | Compliant | 1 | TSKA |
4620 | 1 | NotCompliant | 3 | Rohs | 2 | Compliant | 25 | Reach | ||||
749120 | 2 | Compliant | 25 | Reach |