谁能帮助我的语法?运行以下查询时出现此错误:
消息 102,级别 15,状态 1,第 17 行
'REGISTRY' 附近的语法不正确
我不确定从哪里开始解决这个问题。我认为问题源于糟糕的枢轴语法或将变量与东西一起使用。我正在使用 SSMS18 - 谢谢!
IF OBJECT_ID('tempdb..#unpivotedDetail') IS NOT NULL
BEGIN
DROP TABLE #unpivotedDetail;
END
IF OBJECT_ID('tempdb..#UniqueRegistryList') IS NOT NULL
BEGIN
DROP TABLE #UniqueRegistryList;
END
IF OBJECT_ID('tempdb..#unpivotedDetail') IS NOT NULL
BEGIN
DROP TABLE #unpivotedDetail;
END
BEGIN
IF OBJECT_ID('tempdb..#unpivotedDetail') IS NOT NULL
BEGIN
DROP TABLE #unpivotedDetail;
END;
IF OBJECT_ID('tempdb..#pivotedDetail') IS NOT NULL
BEGIN
DROP TABLE #pivotedDetail;
END;
WITH cte AS
(
SELECT
rdi.NETWORKED_ID [PatientEpicId],
rdt.FIRST_INCLUDE_DTTM [StartDate],
rdt.LAST_UPDATE_DTTM [DateLastUpdated],
rdt.REGISTRY_ID [RegistryEpicId],
hfr.REGISTRY_NAME [RegistryName]
FROM
dbo.REG_DATA_MEMBERSHP [rdt]
INNER JOIN
dbo.REGISTRY_DATA_INFO [rdi] ON rdt.RECORD_ID = rdi.RECORD_ID
INNER JOIN
dbo.REGISTRY_CONFIG [hfr] ON rdt.REGISTRY_ID = hfr.REGISTRY_ID
WHERE
rdt.REGISTRY_STATUS_C = 1
),
working AS
(
SELECT
ept.PAT_MRN_ID [MontageMrn],
cte.PatientEpicId,
cte.RegistryEpicId,
cte.RegistryName,
MIN(cte.StartDate) [StartDate],
MAX(DateLastUpdated) [DateLastUpdated]
FROM
cte
LEFT JOIN
dbo.PATIENT [ept] ON cte.PatientEpicId = ept.PAT_ID
GROUP BY
ept.PAT_MRN_ID,
cte.PatientEpicId, cte.RegistryEpicId, cte.RegistryName
)
SELECT
*
INTO
#unpivotedDetail
FROM
working;
此查询返回患者注册表列表,每个注册表中每个患者一行。
现在我们需要将其转出,以便每个患者有一行,每个注册表有一列。
-- Get a list of the distinct registry names for the PIVOT clause
DECLARE @RegistryList NVARCHAR(MAX)
SELECT DISTINCT
RegistryName
INTO
#UniqueRegistryList
FROM
#unpivotedDetail;
SELECT
@RegistryList = STUFF((SELECT
',' + QUOTENAME(RegistryName)
--'],[' + RegistryName
FROM
#UniqueRegistryList AS tmp1
FOR XML PATH ('')), 1, 2, '');
-- Build a query that uses the list of registries to pivot the results
DECLARE @Query NVARCHAR(MAX);
SET @Query = 'SELECT *
INTO edma.PatientRegistryDetail
FROM
(SELECT *
FROM #unpivotedDetail
WHERE StartDate >= "2021-12-01"
AND StartDate <= GETDATE()) [ip]
PIVOT
(MIN([DateLastUpdated])
FOR [working.RegistryName] IN (' + @RegistryList + ')) [pvt]';
EXEC (@Query);