有趣的查询-SQL挑战!

2020-08-22 06:10发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

在我的项目要求之一中,我遇到了一个具有挑战性的SQL场景。.(我仍在努力以获取最佳选择)。

因此,我想与其他人分享这个有趣的查询,以尝试了解我们可以采用的方法。 (抱歉,我无法共享DDL脚本)。 我们有以下表格分别用于"症状主数据"(YSAM_SYMPTOMS),"疾病主数据"(YSAM_SICKNESS),可告诉您疾病的所有症状和"患者测试结果"交易表(YSAM_PAT_TESTS)。

任务是为"获取具有冠状病毒所有症状的所有患者ID和患者姓名的列表"编写一个SQL查询。

解决方案应仅在单个打开的SQL中(无ABAP或AMDP逻辑。表YSAM_SYMPTOMS主表仅供参考,在Query中不需要)。 我对此有一个解决方案,但我认为它不那么优雅。 因此,请社区人士分享有关SQL查询的想法。

注意:我当前的系统是SAP_ABAP-7.50(因此也没有CTE),HANA作为数据库。

此致

Samson

(288.4 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

在我的项目要求之一中,我遇到了一个具有挑战性的SQL场景。.(我仍在努力以获取最佳选择)。

因此,我想与其他人分享这个有趣的查询,以尝试了解我们可以采用的方法。 (抱歉,我无法共享DDL脚本)。 我们有以下表格分别用于"症状主数据"(YSAM_SYMPTOMS),"疾病主数据"(YSAM_SICKNESS),可告诉您疾病的所有症状和"患者测试结果"交易表(YSAM_PAT_TESTS)。

任务是为"获取具有冠状病毒所有症状的所有患者ID和患者姓名的列表"编写一个SQL查询。

解决方案应仅在单个打开的SQL中(无ABAP或AMDP逻辑。表YSAM_SYMPTOMS主表仅供参考,在Query中不需要)。 我对此有一个解决方案,但我认为它不那么优雅。 因此,请社区人士分享有关SQL查询的想法。

注意:我当前的系统是SAP_ABAP-7.50(因此也没有CTE),HANA作为数据库。

此致

Samson

(288.4 kB)
付费偷看设置
发送
4条回答
槿木_熙
1楼 · 2020-08-22 06:45.采纳回答

虽然我可以理解不允许从系统中提供完整的DDL和真实数据,但我不清楚您为什么不认为可以为此查询提供简化的ddl和示例数据。

我将其简化了一些。 我的系统是SAP Adaptive Server Enterprise,因此TSQL可能需要对HANA进行一些调整。 20),SYMPTOMID int)

插入YSAM_PAT_TESTS值(1001、01) 插入YSAM_PAT_TESTS值(1001、03)

插入YSAM_PAT_TESTS值(1002,01) 插入YSAM_PAT_TESTS值(1002,02)
插入YSAM_PAT_TESTS值(1003,01) 插入YSAM_PAT_TESTS值(1003,02)
插入YSAM_PAT_TESTS值(1003、06) 插入YSAM_PAT_TESTS值(1004,02)
插入YSAM_PAT_TESTS值(1004,04) 插入YSAM_PAT_TESTS值(1004,07)
插入YSAM_PAT_TESTS值(1005、06) 插入YSAM_PAT_TESTS值(1005,07)
插入YSAM_SICKNESS值(" Common Flu",01)
插入YSAM_SICKNESS值("电晕病毒",01)
插入YSAM_SICKNESS值("电晕病毒",02)

选择
p.PATIENTID
从 YSAM_PAT_TESTS p, YSAM_SICKNESS
在哪里 p.SYMPTOMID = s.SYMPTOMID
AND s.SICKNESSNAME ="电晕病毒"
组别 病人
拥有 count(*)=(
SELECT计数(*)
从YSAM_SICKNESS
WHERE SICKNESSNAME ="电晕病毒" )

太Q了
2楼-- · 2020-08-22 06:41

嗨,布拉德,

真诚地道歉,没有考虑提供简化的DDL。 也感谢您共享DDL并抽出宝贵的时间进行响应。

您的查询肯定可以工作,但是我想避免对YSAM_SICKNESS进行两次引用(通过JOIN或子查询,如Venkat的响应)。

所以我现在暂时保持线程打开以查看其他选项。

此致

Samson。

me_for_i
3楼-- · 2020-08-22 06:49
选择患者ID,患者名称,
   当症状='01'然后是'FEVER'否则为``FEVER''
   当SYMPTOMID ='02'然后是'COLD'ELSE''时以``COLD''结尾
 从
 (从YSAM_PAT_TESTS中选择PATIENTID,PATIENTNAME,症状
       症状所在
       (从YSAM_SICKNESS(其中SICKNESSID ='02'的情况下选择SYMPTOMID))AS Z
 拥有COUNT(*)=(从YSAM_SICKNESS的SICKNESSID ='02'中选择COUNT(*))
 
暮风yp
4楼-- · 2020-08-22 06:47

您好,Venkat,

感谢您的回复。

我也有相同的解决方案(如下所示)。

但是以某种方式我想避免对YSAM_SICKNESS的子查询被执行两次。 因此,我现在将线程保持打开状态以查看其他选项。

此致

Samson

一周热门 更多>