0

谁能帮助我的语法?运行以下查询时出现此错误:

消息 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);
4

0 回答 0