I need to convert some SQL statement from MS Access to SQL Server using a pivot table. I have a view [UETTDRSB39A Criteria]
and a table [RPLEvidence options]
.
I have never tried using pivot tables in SQL Server.
The MS Access code is:
TRANSFORM First([UETTDRSB39A Criteria].[RPL Link]) AS [FirstOfRPL Link]
SELECT [UETTDRSB39A Criteria].[RPL Link], [UETTDRSB39A Criteria].[RPLEvidence options].Detail
FROM [UETTDRSB39A Criteria], [2_Candidate Evidence records]
WHERE ((([UETTDRSB39A Criteria].Pathway) In ('Common','Electrical')))
GROUP BY [UETTDRSB39A Criteria].[RPL Link], [UETTDRSB39A Criteria].[RPLEvidence options].Detail
PIVOT [UETTDRSB39A Criteria].Prerequisite;
The desired (Access) output is:
The Incorrect SQL Server Query is:
use LinesmanRPL
SELECT * from
(
Select distinct [RPL Link] as expr1, [RPL Link], [RPLEvidenceOptionsDetail], [Prerequisite]
from [UETTDRSB39A Criteria], [2_Candidate Evidence records]
where [UETTDRSB39A Criteria].Pathway = 'Common' or [UETTDRSB39A Criteria].Pathway = 'Electrical'
)temp
PIVOT
(
min(temp.expr1)
FOR temp.[Prerequisite]
IN (Prereq1, Prereq2, Prereq3)
) AS p
order by [RPL Link]
The sample data for UETTDRSB39A Criteria
The sample data for 2_Candidate Evidence records
I also tried another SQL code:
use LinesmanRPL
DECLARE @PivotColumnHeaders VARCHAR(max);
SELECT distinct @PivotColumnHeaders = COALESCE(@PivotColumnHeaders + ',['+ CAST(Prerequisite as varchar) + ']','['+ CAST(Prerequisite as varchar) + ']','['+ CAST(Prerequisite as varchar) + ']')
FROM [UETTDRSB39A Criteria]
where [UETTDRSB39A Criteria].Pathway='Common' or [UETTDRSB39A Criteria].Pathway='Electrical';
DECLARE @PivotTableSQL NVARCHAR(max);
SET @PivotTableSQL = N'
SELECT distinct *
FROM (
SELECT DISTINCT
U.[RPL Link],
U.Prerequisite,
U.[RPLEvidenceOptionsDetail]
FROM [UETTDRSB39A Criteria] as U, [2_Candidate Evidence records] as C
) as pivotData
pivot(
min([RPL Link])
for Prerequisite in (' + @PivotColumnHeaders +')
) as pivotTable
'
;
execute(@PivotTableSQL);