根据我原始帖子中两条评论的输入,我做了修改并创建了以下脚本的一个版本。下面的所有内容都称为T13,并与其他表格保持联接。它的工作。也许有一个更有效的方法来做到这一点,但它的工作。然后,我做的唯一事情就是添加“UNION ALL”部分。从那时起,我不断收到以下错误:限于唯一ID a具有多个子句的CASE
错误: ORA-00911:无效字符 00911. 00000 - “无效字符” *原因:标识不得与 字母和数字以外的任何ASCII字符开始。 $#_也是在第一个 之后的字符。由双引号括起来的标识符可能包含 除双引号以外的任何字符。替代引号 (q'#...#')不能使用空格,制表符或回车作为 分隔符。有关所有其他上下文,请参阅SQL语言参考手册 。 *操作: 错误在行:143列:27
我追逐错误,只是重新编写相同的代码,然后再次弹出一个不同的行和列。
-
下面是我正在尝试做的原始文章。
下面的脚本是为了给我一个yes
或no
为每个AN_52_ENC_CSN_ID
。问题在于medication_ID
可能在我的时间限制之外另外发生。结果是多个AN_52_ENC_CSN_ID
其中之一是yes
和其余no
。如果发生在列出的时间限制内,我怎么能只有一个唯一的AN_52_ENC_CSN_ID
,yes
,否则no
。我想过一种方法来计算包含yes
的独特AN_52_ENC_CSN_ID
的行,然后在AN_52_ENC_CSN_ID
上分组,但我无法将其包围。
有帮助吗?
SELECT T3.AN_52_ENC_CSN_ID, T3.AN_STOP_DATETIME, (T3.AN_STOP_DATETIME +.125),
CASE
WHEN TOTAL_ADMIN_COUNT > 0 THEN 'YES'
ELSE 'NO' END AS PONV
From (SELECT
CLARITY.F_AN_RECORD_SUMMARY.AN_52_ENC_CSN_ID,
CLARITY.F_AN_RECORD_SUMMARY.AN_STOP_DATETIME,
CLARITY.F_AN_RECORD_SUMMARY.AN_EPISODE_ID
FROM CLARITY.OR_LOG
INNER JOIN CLARITY.F_AN_RECORD_SUMMARY
ON CLARITY.OR_LOG.LOG_ID = CLARITY.F_AN_RECORD_SUMMARY.LOG_ID
INNER JOIN CLARITY.V_LOG_BASED
ON CLARITY.OR_LOG.LOG_ID = CLARITY.V_LOG_BASED.LOG_ID
INNER JOIN CLARITY.PATIENT
ON CLARITY.F_AN_RECORD_SUMMARY.AN_PAT_ID = CLARITY.PATIENT.PAT_ID
WHERE CLARITY.OR_LOG.LOC_ID IN (4060020, 4060021)
and (CLARITY.F_AN_RECORD_SUMMARY.AN_STOP_DATETIME - CLARITY.F_AN_RECORD_SUMMARY.AN_START_DATETIME) *24*60 > 0
) T10
LEFT JOIN
(
SELECT AN_EPISODE_ID,
SUM(MedCount) AS TOTAL_ADMIN_COUNT
FROM (SELECT AN_EPISODE_ID, COUNT(ord.ORDER_MED_ID) as MedCount
FROM F_AN_RECORD_SUMMARY An
inner join MAR_ADMIN_INFO Mar
on An.AN_52_ENC_CSN_ID = Mar.MAR_ENC_CSN
inner join ORDER_MED Ord
on Mar.ORDER_MED_ID = Ord.ORDER_MED_ID
inner join V_LOG_TIMING_EVENTS ORL
on An.LOG_ID = ORL.LOG_ID
where Ord.MEDICATION_ID IN (104661, 2787)
and Mar.TAKEN_TIME > AN.AN_STOP_DATETIME -- ANESTHESIA STOP TIME
and Mar.TAKEN_TIME < (AN.AN_STOP_DATETIME +.125) -- ANESTHESIA STOP TIME PLUS 3 HOURS
group by An.AN_EPISODE_ID
Union all
select AN_EPISODE_ID, COUNT(ord2.ORDER_MED_ID) as MedCount
from F_AN_RECORD_SUMMARY An2
inner join AN_HSB_LINK_INFO Link2
on An2.AN_52_ENC_CSN_ID=Link2.AN_52_ENC_CSN_ID
inner join MAR_ADMIN_INFO Mar2
on Link2.AN_BILLING_CSN_ID = Mar2.MAR_ENC_CSN
inner join ORDER_MED Ord2
on Mar2.ORDER_MED_ID = Ord2.ORDER_MED_ID
inner join V_LOG_TIMING_EVENTS ORL2
on An2.LOG_ID = ORL2.LOG_ID
where Ord2.MEDICATION_ID IN (104661, 2787)
and Mar2.TAKEN_TIME > AN.AN_STOP_DATETIME -- ANESTHESIA STOP TIME
and Mar2.TAKEN_TIME < (AN.AN_STOP_DATETIME +.125) -- Stop +3 HOURS
Group by An2.AN_EPISODE_ID
)
GROUP BY AN_52_ENC_CSN_ID
)T11
ON T10. AN_52_ENC_CSN_ID = T11. AN_52_ENC_CSN_ID
我很欣赏这个输入,但那并不奏效。仍然有重复的52_enc行与是和否。 – JoshuaB
如果您可以更新您的问题以提供您的查询产生的一些样本输出数据以及您想实现的结果,这将有所帮助。那样,我们应该能够更好地帮助你。 – Boneist