Мне нужно преобразовать некоторые операторы SQL из MS Access в SQL Server, используя сводную таблицу. У меня есть представление [UETTDRSB39A Criteria]
и таблица [RPLEvidence options]
.
Я никогда не пытался использовать сводные таблицы в SQL Server.
Код MS Access:
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;
Требуемый (Доступ) выход:
Неверный запрос к SQL Server:
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]
Фактический (SQL) вывод:
Пример данных для UETTDRSB39A Критерии
Пример данных для 2_Кандидатных доказательств
Я также попробовал другой код SQL:
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);
Вывод этого кода: