【发布时间】:2021-05-01 21:34:18
【问题描述】:
我正在将查询从 MS SQL 转换为 Snowflake SQL,我想知道如何使用子查询(或等效于 Snowflake)来转换记录数。在下面的代码中,“NUM_VISITS”返回每位患者的遭遇次数。
如果我硬编码一个静态数字来代替“NUM_VISITS”,则查询不会出现问题,因此我确信问题在于我如何调用子查询。运行显示的代码时,出现以下错误:
SQL 编译错误:第 15 行的第 20 位语法错误出现意外的“SELECT”。位置 32 处的第 15 行语法错误意外'('。
SELECT
'HB' as "TXN_SOURCE",
enc.PAT_ID,
enc.PAT_ENC_CSN_ID,
enc.contact_date,
enc.PRIMARY_LOC_ID,
enc.department_id,
CASE
WHEN enc.DEPARTMENT_ID = 1229296 AND txn.PROC_ID = 12255396 THEN 'YES'
ELSE 'NO'
END as "KITCHEN_CLASS",
"NUM_VISITS" = (SELECT COUNT(enc2.contact_date)
FROM HI_DB.STG_EPICCLARITY_PHS.PAT_ENC enc2
JOIN HI_DB.STG_EPICCLARITY_PHS.HSP_TRANSACTIONS txn2
ON enc2.PAT_ENC_CSN_ID = txn2.PAT_ENC_CSN_ID
WHERE enc.pat_id = enc2.pat_id
enc2.CONTACT_DATE BETWEEN $StartDate AND $EndDate
AND txn2.PROC_ID IN (12255387,12255388,12255395,12255396)
AND enc2.SERV_AREA_ID = 12288)
,
txn.PROC_ID
FROM HI_DB.STG_EPICCLARITY_PHS.PAT_ENC enc
JOIN HI_DB.STG_EPICCLARITY_PHS.HSP_TRANSACTIONS txn
ON enc.PAT_ENC_CSN_ID = txn.PAT_ENC_CSN_ID
WHERE enc.CONTACT_DATE BETWEEN $StartDate AND $EndDate
AND txn.PROC_ID IN (12255387,12255388,12255395,12255396)
AND enc.SERV_AREA_ID = 12288;
在解决了所指出的语法问题后,我能够通过从 JOIN 调用子查询来使代码正常工作。以下是功能代码:
SELECT
'HB' as "TXN_SOURCE",
enc.PAT_ID,
enc.PAT_ENC_CSN_ID,
enc.contact_date,
enc.PRIMARY_LOC_ID,
enc.department_id,
CASE
WHEN enc.DEPARTMENT_ID = 1229296 AND txn.PROC_ID = 12255396 THEN 'YES'
ELSE 'NO'
END as "KITCHEN_CLASS",
cnt.COUNT,
txn.PROC_ID
FROM HI_DB.STG_EPICCLARITY_PHS.PAT_ENC enc
JOIN HI_DB.STG_EPICCLARITY_PHS.HSP_TRANSACTIONS txn
ON enc.PAT_ENC_CSN_ID = txn.PAT_ENC_CSN_ID
LEFT JOIN (SELECT enc2.PAT_ID,
COUNT(enc2.contact_date) as "COUNT"
FROM HI_DB.STG_EPICCLARITY_PHS.PAT_ENC enc2
JOIN HI_DB.STG_EPICCLARITY_PHS.HSP_TRANSACTIONS txn2
ON enc2.PAT_ENC_CSN_ID = txn2.PAT_ENC_CSN_ID
WHERE enc2.CONTACT_DATE BETWEEN $StartDate AND $EndDate
AND txn2.PROC_ID IN (12255387,12255388,12255395,12255396)
AND enc2.SERV_AREA_ID = 12288
GROUP BY enc2.PAT_ID) as cnt ON enc.PAT_ID = cnt.PAT_ID
WHERE enc.CONTACT_DATE BETWEEN $StartDate AND $EndDate
AND txn.PROC_ID IN (12255387,12255388,12255395,12255396)
AND enc.SERV_AREA_ID = 12288;
【问题讨论】:
标签: snowflake-cloud-data-platform